En C#, n'est-ce pas le pattern observer déjà mis en œuvre à l'aide d'Événements?

StackOverflow https://stackoverflow.com/questions/32034

  •  09-06-2019
  •  | 
  •  

Question

Après la lecture de la Tête d'Abord, les Modèles de Conception de livre et à l'aide d'un certain nombre d'autres modèles de conception, j'essaie de comprendre le pattern observer.N'est-ce pas déjà mis en œuvre à l'aide d'Événements dans le .NET Framework?

Était-ce utile?

La solution

Oui, il est.L'observateur est aussi appelé le modèle de publication/abonnement, ce qui est exactement ce que les événements vous permettent de le faire.

Autres conseils

Je dirais que oui, c'était Anders Heljsberg l'intention de faire le pattern observer de première classe pour le langage, avec les événements en C#, basé sur son expérience avec Delphi.Anders fait ce et sur d'autres intentions claires dans une excellente interview sur Génie Logiciel Radio.

Oui, c'est identique.

Une remarque:si vous voulez vraiment comprendre les événements, je recommande d'apprendre le pattern observer et de mettre en œuvre vous-même pour un moment.Une fois que vous comprenez pleinement, de cesser de le faire vous-même et professionnel et bien documentée de la mise en œuvre, sauf si vous avez un besoin réel de faire autrement.

C'est vrai, les événements sont une implémentation du pattern observer.J'ai lu des discussions , cependant, de ceux qui sont encore à écrire leur propre, pour leur donner une plus grande souplesse, ou peut-être juste pour éviter un événement de collecte de syntaxe.

Oui, mais la programmation de l'observateur modèle explicitement et donc de ne pas utiliser les délégués et les événements dans le débogage plus facile 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 ce que les produits dans la liste être averti d'un changement.Lors du débogage, vous pouvez consulter le ProductList...

Avec l'aide des délégués et des événements, il peut être plus difficile de savoir combien de "délégués" sont en réalité des "abonnés" pour gérer l'événement.

La plupart des langages modernes, la prise en charge native pour certains des modèles de conception.Il a été soutenu que les langues sont plus des modèles qu'ils supportent nativement sans la nécessité de mettre en œuvre de façon explicite, et que Lisp est excellent dans ce domaine.Jeff avait quelque chose à dire à ce sujet, aussi.

Microsoft Lui-même déclare que l'utilisation des événements et des délégués est le c# d'appliquer le Pattern observer.À l'aide de certains de base des conventions de nommage pour les événements et les délégués qu'ils ont nommé leur propre motif L'Événement "Pattern" qui fait exactement la même chose de la fourniture de certains avantages supplémentaires sur la classique Modèle Observateur.

L'Événement "Pattern" est décrit dans la Bibliothèque MSDN à l'intérieur de l' "Explorer le Design Pattern Observateur"L'Article.

Référence de l'Article MSDN

Basé sur des événements et des délégués, le FCL utilise le pattern observer de manière assez approfondie.Les concepteurs de la FCL pleinement rendu compte de la puissance inhérente à ce modèle, en l'appliquant à la fois de l'interface utilisateur et non de l'INTERFACE utilisateur des fonctionnalités spécifiques dans l'ensemble du Cadre.Cette utilisation, cependant, est une légère variation sur la base de modèle Observateur, dont le Cadre de l'équipe a qualifié l'Événement de Modèle.En général, ce modèle est exprimé sous la forme formelle des conventions de nommage pour les délégués, les événements et les méthodes connexes impliqués dans l'événement processus de notification.Microsoft recommande que toutes les applications et les cadres qui utilisent les événements et les délégués à adopter ce modèle, bien qu'il n'existe pas d'application dans le CLR ou standard compilateur

Après examen du dossier de l'Observateur de modèle, il devrait être évident que ce modèle fournit un mécanisme idéal pour assurer croustillante frontières entre les objets dans une application, quelle que soit leur fonction (UI ou autre).Bien que relativement simple à mettre en œuvre via des rappels (à l'aide de la IObserver et IObservable interfaces), le CLR concepts des délégués et des événements de traiter la majorité des "gros travaux" ainsi que de réduire le niveau de couplage entre le sujet et l'observateur.

Non, ils permettent d'atteindre le même objectif, mais ils sont différents.Je dirais que le modèle Observateur est tout à fait un hack de conception pour atteindre quelque chose que vous pourriez avoir atteint facilement avec la programmation fonctionnelle, et que .NET événements utilise la programmation fonctionnelle pour atteindre le même but.

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