Comment puis-je profiter de IObservable / IObserver pour se débarrasser de mon « objet dieu »?

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

Question

Dans un système, je travaille actuellement, j'ai beaucoup de composants qui sont définis comme les interfaces et les classes de base. Chaque partie du système a quelques points précis où ils interagissent avec d'autres parties du système.

Par exemple, les données de composant prépare PRÉPARE certaines données qui doit finalement aller à la partie de traitement de données, la composante de communication doit interroger les différentes composantes de leur statut pour relayer à l'extérieur, etc.

Actuellement, je colle ces parties du système en même temps en utilisant un « objet de Dieu », ou un objet possédant une connaissance intime des différentes parties du système. Il enregistre des événements ici et navettes les résultats aux méthodes là-bas, crée une méthode de rappel ici et renvoie le résultat de cette méthode là-bas, et passe de nombreuses demandes à travers une file d'attente multi-thread pour le traitement, car il « sait » que certaines actions ont pour fonctionner sur threads STA, etc.

Bien que sa pratique, il me préoccupe que celui-ci connaît le type tant sur la façon dont tout le monde dans le système est conçu. Je préfère de beaucoup un hub plus générique qui peut être donné des instances qui peuvent exposer des événements ou des méthodes ou callbacks ou qui peuvent consommer ces derniers.

J'ai été voir plus sur les caractéristiques IObservable / IObserver du cadre réactif et qui sont en cours de déploiement dans .NET 4.0 (je crois).

Puis-je tirer parti de ce modèle pour aider à remplacer mon « objet dieu »? Comment dois-je aller à faire cela? Y a-t-il des ressources pour l'utilisation de ce modèle à cet effet spécifique?

Était-ce utile?

La solution

Il semblerait que vous pouvez remplacer votre objet dieu avec ce que MSDN décrit ici:

  

Pour créer le traitement des événements complexes   (CEP) des applications utilisant Microsoft   plate-forme StreamInsight, vous créez   structures qui définissent les événements,   les objets qui produisent et consomment le   événements et modèles de requête   contiennent la logique métier nécessaire pour   traiter les événements.

Notre équipe ne se déplace pas à 4,0 .Net dans un proche avenir (malheureusement). Nous avons donc contourné objet dieu scénario en construisant un cadre personnalisé semblable à ce que CRG / MEF fournit. Cela a créé une base de connaissances distribuées en utilisant ce que Microsoft appelle un adaptateur . Chaque adaptateur est seul responsable de son propre module, les données passant, événements, etc. Il y a une commune opérateur qui reçoit les données et les événements, les processus, et passe de nouveau à l'adaptateur respectif.

Ma compréhension de IObservable & me prête IObserver croire qu'un objet dieu ne sera pas nécessaire - en effet la création d'une base de connaissances distribuées de ce qui se passe dans les différentes parties. Un avantage évident de ces interfaces semble également que le communicateur intermédiaire (à savoir l'adaptateur) est plus nécessaire. Ainsi, la diffusion des connaissances est vraiment dans la classe dérivée IObservable. Ce modèle dérive intrinsèquement bavard / répondeur relation -. Pas de classe médiation / arbitrage

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