Le problème, c'est que vous êtes en comparant les différentes langues et essaie de forcer la place des chevilles dans les trous ronds.
Pour Java AspectJ répond à un besoin en raison des limites de la langue, mais .NET n'est pas nécessairement ces limitations, comme la JVM n'est pas, mais Java n'.
Par exemple, vous pouvez utiliser IronPython ou IronRuby (en plus d'autres) pour écrire des assemblées qui sont très dynamiques, donc vous pouvez écrire un DSL (domain specific language) qui permettront à l'utilisateur d'ajouter dans le code qui n'est pas du XML, mais va changer la façon dont fonctionne le programme.
Vous pouvez utiliser des méthodes d'extension en C# pour changer le comportement par remplacement d'assemblages, de façon à avoir une assemblée qui ont des extensions de fichiers journaux vers un fichier, puis vous remplacez cette assemblée pour une autre ayant le même espace de noms qui va envoyer les données à un service web, ou de faire un noop.
Mais, il y a des limites à ce qui peut être difficile à surmonter, comme le fait d'être en mesure d'utiliser l'un des aspects à faire quelque chose dans chaque fonction appelée, comme l'utilisation de cflow (http://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html), mais c'est peut être parce que je n'ai pas assez pensé comment le faire.
Mon but n'est pas de donner une explication complète de la façon dont .NET n'a pas besoin d'AspectJ, mais de montrer qu'il existe des moyens pour obtenir le comportement que l'on peut attendre sans l'aide de l'AOP.
Pour les applications en cours d'exécution sur la machine, vous pouvez utiliser Groovy, Clojure, JRuby et Scala, par exemple, pour contourner les limitations de Java.
Mise à JOUR:
J'espérais garder ma réponse plus court, mais une certaine compréhension de l'AOP peut être utile pour ajouter du contexte à ma réponse.
La Programmation Orientée aspects (AOP) est un paradigme de programmation différent, pour des fonctionnalités qui coupe à travers les classes, telles que l'exploitation forestière. La journalisation est une situation commune, où vous pouvez vous connecter toutes les requêtes SQL utilisées, alors, plutôt que de copier le code d'un endroit à, vous le mettez dans un endroit et il est mis dans partout que vous spécifiez, donc, si vous décidez plus tard de modifier l'endroit où l'enregistrement se passe, vous le changez en un seul endroit.
Mais avec AspectJ il y a plus d'options. Par exemple, vous vendez un programme qui stocke les mots de passe. L'entreprise A utilise IDÉE, la société B utilise AES. Afin de s'adapter vous modifiez le code qui est utilisé lors de l'exécution de sorte que vous n'avez pas à risque de recompiler le code et l'introduction de nouveaux bugs, et il est modifié, de sorte que chaque fois que quelqu'un appelle getPassword()
le nouveau code est utilisé pour le décrypter.
Vous pouvez également ajouter des fonctionnalités à une classe existante, de sorte que je mettrais dans les interfaces de sorte que tout de cette interface ont désormais accès à des fonctions, de sorte que les méthodes étaient maintenant de béton, dans l'interface.
Mais, en utilisant d'autres langues qui sont sur le .NET et de JVM vous pouvez faire toutes ces, avec la même modularité, par bien choisir la langue à utiliser. Par exemple, en Java, vous pouvez accéder à des classes écrites en Groovy ou Scala, de sorte que vous pouvez obtenir plus de flexibilité avec ces langues et ont encore la principale application en Java.
En C#, vous pouvez utiliser F#, IronPython ou IronRuby, par exemple, pour obtenir cette fonctionnalité, ou, dans certains cas, vous pouvez utiliser le C#.
De sorte que le besoin pour la programmation orientée aspects est réduit grâce à ces dynamiques, ou fortement typées langages fonctionnels, être disponible, sur ces machines virtuelles, mais, vous le commerce de la complexité de travailler avec les aspects d'une solution multilingue.
Pour en savoir plus sur l'AOP, IBM avait certains des articles incroyables sur l'utilisation, avec leurs AOP@Travail de la série: http://www.ibm.com/developerworks/views/java/libraryview.jsp?search_by=AOP@work:
Pour quelques réflexions sur l'AOP sur .NET, vous pouvez lire le Code d'amputation des AOP vs Proxy à l'Exécution de l'AOP
, http://rogeralsing.com/2008/01/08/code-mangling-aop-vs-runtime-proxy-aop/