2009-04-30 7 views
13

Je suis un développeur de niveau senior mais je n'ai pas eu beaucoup de formation formelle et bien que j'aie utilisé de nombreux modèles de design et les ai utilisés dans mes années de développeur, personne ne s'est vraiment mis en quatre pour le dire. "Oh c'est un modèle d'observateur, ou c'est un motif de Singleton."En quoi le modèle Observer est-il différent d'un modèle piloté par un événement?

En passant en revue certains des motifs de conception, je suis tombé sur le modèle Observer et il semble être très similaire à la façon dont les événements de framework .NET fonctionnent. Ai-je manqué quelque chose de fondamental à ce sujet?

Répondre

19

Le modèle d'événement .NET est à peu près une implémentation intégrée du modèle d'observateur dans le Common Language Runtime. Les langages .NET implémentent l'observateur directement dans leur langage spécifique, en utilisant le support intégré du framework pour cela.

Dans la plupart des langages de programmation, le modèle d'observateur nécessite un développement personnalisé ou des bibliothèques.

Il est fourni gratuitement dans le langage C#, VB.NET et la plupart des autres langages conçus pour utiliser le CLR.

+4

.NET n'est pas une langue, .NET est un environnement d'exécution. –

+4

True. Je me référais au CLR, plus qu'une langue spécifique, mais n'était pas spécifique à mon poste. Edité pour être plus clair. Merci pour le commentaire. –

1

Pourquoi pensez-vous qu'il doit y avoir une différence?

Ne pensez-vous pas que les concepteurs de .NET ont également lu Design Patterns?

En fait, le modèle Observer (comme tous dans le livre) était bien connu bien avant d'être catégorisé et nommé par le Gof4. Il a été utilisé pour implémenter le modèle d'événement .Net, ainsi que les modèles d'événements Win32 & Win16, et probablement beaucoup d'autres.

+1

Je n'ai pas dit qu'il devait y avoir une différence. Je demandais si j'avais manqué quelque chose.(-1 non-réponse agressive) –

+1

Lol @ agressive non-réponse – Janie

+0

cette réponse est bonne +1 – chikak

4

De nombreux modèles d'événements, tels que Java 1.1 et versions ultérieures, ainsi que le modèle d'événement .NET sont essentiellement des implémentations du modèle Observer. Notez que cela s'applique même aux mécanismes plus anciens, tels que l'utilisation de méthodes de rappel en C pour la gestion des événements. C'est la même intention, juste implémentée légèrement différemment.

6

De MSDN

Ceux d'entre vous avec le passage familiarité des types exposés dans la LCM sera noter que pas IObserver, IObservable, ou types ObservableImpl sont présents dans le cadre. La principale raison de leur absence est le fait que le CLR les rend obsolètes après une mode. Bien que vous pouvez certainement utiliser ces constructions dans une application .NET, la introduction des délégués et des événements fournit un moyen nouveau et puissant de mettant en œuvre le modèle d'observateur sans développer des types spécifiques dédiés pour soutenir ce modèle. Dans fait, comme les délégués et les événements sont membres de première classe de la CLR, la fondation de ce modèle est incorporé dans le noyau même du .NET Framework. En tant que tel, le FCL fait une utilisation étendue du motif Observateur dans toute sa structure.

+0

Belle théorie. Dommage qu'ils aient omis certains détails importants (par exemple, que l'éditeur de l'événement donne à l'abonné un jeton qu'il peut utiliser pour se désabonner, ou un moyen par lequel l'éditeur peut demander aux abonnés s'ils sont toujours "intéressés" par leurs abonnements. est, si de nombreuses instances d'un objet qui se rattache à l'événement 'Disposed' d'un objet à vie longue sont créées et abandonnées, il n'y a aucun moyen par lequel ces abonnements seront nettoyés pendant la vie de l'objet à long terme. côté faibles événements, il n'y aurait aucun moyen pour l'éditeur de l'événement .... – supercat

+0

... pour savoir quand leur cible est sortie du champ de l'éditeur.Faiblesse côté éditeur pourrait être un peu mieux, mais ne sont efficaces que si le client est nécessaire d'avoir une forte référence à son propre délégué (ce qui n'est pas une exigence habituelle pour les événements). – supercat

Questions connexes