Question

Je comprends la programmation orientée objet et écrit des programmes OO depuis longtemps. Les gens semblent parler de programmation orientée aspect, mais je n’ai jamais vraiment appris de quoi il s’agissait et comment l’utiliser. Quel est le paradigme de base?

Cette question est liée, mais ne la pose pas tout à fait:

Programmation orientée aspect par rapport à programmation orientée objet

Était-ce utile?

La solution

AOP résout le problème des problèmes transversaux , à savoir tout type de code répété selon différentes méthodes et ne pouvant normalement pas être complètement refactorisé dans son propre module, comme avec la journalisation ou vérification. Donc, avec AOP, vous pouvez laisser ce contenu en dehors du code principal et le définir verticalement comme suit:

function mainProgram()
{ 
   var x =  foo();
   doSomethingWith(x);
   return x;
}

aspect logging
{ 
    before (mainProgram is called):
    { 
       log.Write("entering mainProgram");
    }

    after (mainProgram is called):
    { 
       log.Write(  "exiting mainProgram with return value of "
                  + mainProgram.returnValue);
    }
 } 

aspect verification
{ 
    before (doSomethingWith is called):
    { 
       if (doSomethingWith.arguments[0] == null) 
       { 
          throw NullArgumentException();
       }

       if (!doSomethingWith.caller.isAuthenticated)
       { 
          throw Securityexception();
       }
    }
 }

Ensuite, un aspect-weaver est utilisé pour compiler le code dans ceci:

function mainProgram()
{ 
   log.Write("entering mainProgram");

   var x = foo();   

   if (x == null) throw NullArgumentException();
   if (!mainProgramIsAuthenticated()) throw Securityexception();
   doSomethingWith(x);   

   log.Write("exiting mainProgram with return value of "+ x);
   return x;
} 

Autres conseils

Malheureusement, il semble étonnamment difficile de rendre l’AOP vraiment utile dans une organisation normale de taille moyenne. (Soutien de l'éditeur, sens du contrôle, le fait que vous commenciez par des choses peu importantes conduisant à la pourriture du code, les gens retournant chez eux avec leur famille, etc.)

Je mets tous mes espoirs dans la programmation orientée composite , ce qui est de plus en plus réaliste. Il se connecte à de nombreuses idées populaires et vous donne quelque chose de vraiment cool.

Découvrez une implémentation en cours ici: qi4j.org/

PS. En fait, je pense que l’une des beautés de AOP est aussi son talon d’Achille: non-intrusif, il permet aux gens de l’ignorer s’ils le peuvent, ce qui le traitera comme une préoccupation secondaire dans la plupart des organisations.

Copié d'un duplicata pour être complet (Einstein):

Les exemples classiques sont la sécurité et la journalisation. Au lieu d'écrire du code dans votre application pour consigner l'occurrence de x ou vérifier l'objet z à des fins de contrôle d'accès sécurisé, il existe un problème de langage "hors bande". du code normal qui peut systématiquement injecter de la sécurité ou se connecter à des routines qui ne les ont pas nativement de telle sorte que même si votre code ne le fournit pas, il est pris en charge.

Un exemple plus concret est le système d’exploitation fournissant des contrôles d’accès à un fichier. Un logiciel n’a pas besoin de vérifier les restrictions d’accès car le système sous-jacent fonctionne pour lui.

Si vous pensez avoir besoin d'AOP d'après mon expérience, vous devez réellement investir davantage de temps et d'efforts dans la gestion appropriée des métadonnées dans votre système, en mettant l'accent sur une conception structurelle / système bien pensée.

Copié à partir de Spring in Action

  

AOP est souvent défini comme une technique qui favorise la séparation des   préoccupations dans un système logiciel. Les systèmes sont composés de plusieurs   composants, chacun responsable d’une fonctionnalité spécifique.   Mais souvent, ces composants ont aussi des responsabilités supplémentaires   au-delà de leur fonctionnalité principale. Services système tels que la journalisation,   la gestion des transactions et la sécurité se retrouvent souvent dans   composants dont les responsabilités fondamentales sont autre chose. Ces système   les services sont communément appelés préoccupations transversales car   ils ont tendance à couper plusieurs composants d'un système.

Copié d'un duplicata pour être complet (Buzzer):

Les attributs de classe et de méthode dans .NET sont une forme de programmation orientée aspect. Vous décorez vos classes / méthodes avec des attributs. En coulisse, cela ajoute du code à votre classe / méthode qui remplit les fonctions particulières de l'attribut. Par exemple, le marquage d’une classe sérialisable lui permet d’être sérialisée automatiquement pour être stockée ou transmise à un autre système. D'autres attributs peuvent marquer certaines propriétés comme non sérialisables et celles-ci seraient automatiquement omises de l'objet sérialisé. La sérialisation est un aspect, implémenté par un autre code du système et appliqué à votre classe par l'application d'une "configuration". attribut (décoration).

Il y a un exemple de AOP, il a utilisé le printemps AOP comme exemple. L'exemple est assez facile à comprendre.

Le cadre Spring AOP (Programmation orientée aspect) est utilisé pour modéliser les problèmes transversaux dans les aspects. En termes simples, il s’agit simplement d’un intercepteur pour intercepter certains processus, par exemple, lorsqu’une méthode est exécutée, Spring AOP peut détourner la méthode en cours d’exécution et ajouter des fonctionnalités supplémentaires avant ou après son exécution.

Référence: http://www.mkyong.com/spring/spring -aop-examples-advice /

AOP peut être utilisé pour effectuer des actions qui ne sont pas liées à la logique métier de votre application, telles que la journalisation, la mise en cache, etc. Ces actions peuvent être placées dans une partie distincte de votre application, puis réutilisées dans toute l'application. Il y a généralement deux façons d'accomplir cela. Injecter le code automatiquement par un préprocesseur avant / après une méthode ou attacher des classes proxy qui interceptent un appel de méthode et peuvent ensuite exécuter des tâches avant / après un appel de méthode.

Voici un exemple en .Net. Il utilise des classes proxy pour intercepter les appels de méthode et exécutez le code avant ou après les appels de méthode saif.

Programmation orientée aspect (AOP) dans .NET Core et C # avec AutoFac et DynamicProxy

AOP est un moyen de mieux modulariser votre application pour une fonctionnalité couvrant plusieurs frontières. L'AOP est un autre moyen d'encapsuler ces fonctionnalités et de suivre Single Responsiblity en déplaçant ces problèmes transversaux (journalisation, gestion des erreurs, etc.) hors des composants principaux de votre application. Lorsqu'il est utilisé correctement, l'AOP peut entraîner des niveaux de maintenabilité et d'extensibilité plus élevés dans votre application avec le temps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top