38 votes

Utilisez-vous de l'AOP (Aspect Oriented Programming) dans un logiciel de production?

L'AOP est un intéressant paradigme de programmation, à mon avis. Cependant, il n'y a pas eu des discussions à ce sujet encore ici sur stackoverflow (au moins, je ne pouvais pas les trouver). Que pensez-vous en général? Utilisez-vous des AOP dans vos projets? Ou vous pensez que c'est plutôt une niche de la technologie qui ne sera pas autour pendant un long moment ou de ne pas le faire dans le mainstream (comme la programmation orientée objet n'a, au moins en théorie ;))?

Si vous n'utilisez AOP alors s'il vous plaît laissez-nous savoir quels outils vous utilisez ainsi. Merci!

23voto

Eli Courtwright Points 53071

Python supporte AOP en vous permettant de modifier dynamiquement ses classes au moment de l'exécution (qui en Python est généralement appelé monkeypatching plutôt que de l'AOP). Voici quelques unes de mes AOP cas d'utilisation:

  1. J'ai un site web dans lequel chaque page est généré par une fonction Python. J'aimerais prendre une classe et de faire toutes les pages web générées par la classe protégé par mot de passe. AOP vient à la rescousse; avant chaque appel de fonction, je ne la session de vérification et de rediriger si nécessaire.

  2. J'aimerais faire des coupes et de profilage sur un tas de fonctions dans mon programme au cours de son utilisation réelle. AOP me permet de calculer le timing et les données d'impression pour les fichiers journaux sans réellement modifier l'une de ces fonctions.

  3. J'ai un module ou une classe pleine de non thread-safe fonctionne et que je me retrouve à l'utiliser dans certains multi-threaded code. Certains AOP ajoute de verrouillage autour de ces appels de fonction sans avoir à aller dans la bibliothèque et de changer quoi que ce soit.

Ce genre de chose ne se produisent pas très souvent, mais à chaque fois qu'il le fait, monkeypatching est TRÈS utile. Python a aussi des décorateurs qui mettent en oeuvre le Décorateur (http://en.wikipedia.org/wiki/Decorator_pattern) pour accomplir des choses similaires.

Notez que modifier dynamiquement les classes peuvent également vous permettre de travailler autour de bugs ou ajouter des fonctionnalités à un tiers de la bibliothèque sans avoir à modifier la bibliothèque. Je n'ai presque jamais besoin de le faire, mais le peu de fois où il est venu, il a été incroyablement utile.

15voto

Brad Wilson Points 22910

Oui.

Orthogonale préoccupations, comme la sécurité, sont les mieux accompli avec AOP-style interception. Si cela est fait automatiquement (par le biais de quelque chose comme un conteneur d'injection de dépendance) ou manuellement est sans importance pour le but de la fin.

Un exemple: le "avant/après" des attributs dans xUnit.net (un projet open source, je l'ai exécuté) sont une forme de l'AOP de style de la méthode d'interception. Vous décorer vos méthodes de test avec ces attributs, et peu avant et après la méthode de test s'exécute, votre code est appelé. Il peut être utilisé pour des choses comme la mise en place d'une base de données et faire reculer les résultats, l'évolution du contexte de sécurité dans lequel fonctionne le test, etc.

Un autre exemple: les attributs de filtre dans ASP.NET MVC aussi agir comme spécialisés AOP-style méthode d'intercepteurs. L'un, par exemple, permet de dire comment les erreurs non gérées doivent être traités, si elles se produisent dans votre méthode d'action.

Beaucoup d'injection de dépendance des conteneurs, y compris le Château de Windsor et de l'Unité, en charge ce comportement soit "dans la boîte" ou par le biais de l'utilisation d'extensions.

9voto

Dónal Points 61837

Je ne comprends pas comment on peut manipuler les sujets transversaux comme l'exploitation forestière, la sécurité, la gestion des transactions, de gestion des exceptions dans un nettoyage de la mode, sans l'aide de l'AOP.

Toute personne utilisant le framework Spring (probablement autour de 50% de Java, les développeurs en entreprise) est l'aide de l'AOP qu'ils le sachent ou pas.

4voto

Scott Bale Points 4385

En terre Cuite , nous utilisons de l'AOP et de l'instrumentation du bytecode assez largement pour s'intégrer et instrument de logiciels tiers. Par exemple, notre Printemps de l'insertion est réalisée en grande partie par l'aide de aspectwerkz. En un mot, nous avons besoin d'intercepter les appels de Printemps, les haricots et les haricots usines à différents points afin de les regrouper.

Si l'AOP peut être utile pour l'intégration avec la troisième partie du code qui ne peuvent autrement être modifié. Cependant, nous avons trouvé il y a un énorme piège - si possible, utilisez uniquement la troisième partie du public de l'API dans votre rejoindre les points, sinon vous risquez d'avoir votre code cassé par un changement de certaines méthode privée dans la prochaine version mineure, et il devient un entretien cauchemar.

4voto

skaffman Points 197885

L'AOP et la démarcation des transactions est un match dans le ciel. Nous utilisons Spring AOP @Transaction annotations, il rend plus facile et plus intuitif, tx-de démarcation que je n'ai jamais vu nulle part ailleurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X