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?
Réponses
Trop de publicités?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 .
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.
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.