32 votes

En C #, le modèle d'observateur n'est-il pas déjà implémenté à l'aide d'événements?

Après avoir lu le livre Head First Design Patterns et utilisé un certain nombre d'autres modèles de conception, j'essaie de comprendre le modèle Observer. N'est-ce pas déjà implémenté à l'aide d'événements dans le .NET Framework?

25voto

Sander Points 9804

Oui, ça l'est. Le modèle d'observateur est également appelé modèle de publication / abonnement, ce qui est exactement ce que les événements vous permettent de faire.

22voto

flipdoubt Points 4140

Je dirais que oui, c'était l'intention d'Anders Heljsberg de faire du modèle d'observateur un langage de première classe avec des événements en C #, basé sur son expérience avec Delphi. Anders rend cela clair et d'autres intentions de conception claires dans une excellente interview sur Software Engineering Radio .

8voto

Dinah Points 15711

Oui, c'est identique.

Une note: si vous voulez vraiment comprendre les événements, je vous recommande d'apprendre le modèle d'observateur et de le mettre en œuvre vous-même pendant un certain temps. Une fois que vous l'avez bien compris, arrêtez de le faire vous-même et utilisez l'implémentation professionnelle et bien documentée, sauf si vous avez vraiment besoin de faire autrement.

4voto

Ben Scheirman Points 23590

C'est vrai, les événements sont une implémentation du modèle d'observateur. J'ai lu des discussions, cependant, sur des personnes qui écrivent toujours la leur, pour leur donner soit plus de flexibilité, soit peut-être juste pour éviter la syntaxe d'événement.

4voto

Hace Points 750

Oui, mais la programmation explicite du modèle d'observateur et donc l'absence de délégués et d'événements peut faciliter le débogage de votre code.

Considérez la différence:

 public void NotifyObservers()
{
    foreach(Product product in ProductList)
    {
        if (product is IProductObserver)
        {
               product.Update(this)
        }
    }
}
 

Ici, il est très clair quels produits de la liste sont informés d'un changement. Pendant le débogage, vous pouvez inspecter la ProductList ...

Avec l'utilisation de délégués et d'événements, il peut être plus difficile de savoir combien de «délégués» étaient réellement «abonnés» pour gérer l'événement.

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