2010-07-27 6 views
0

J'ai une question de conception sur ce scénario: Supposons que vous ayez un formulaire avec beaucoup de sites à remplir, appelons chaque site un plugin. Parmi d'autres classes que j'ai créé une classe PluginManager qui recueillent des témoignages de tous les plug-ins et fournit des fonctionnalités et des propriétés:C# classes communication conception question

class PluginManager 
{ 
    ... 
    BasePlugin CurrentPlugin {get;set;} 
    IEnumerable<BasePlugin> OpenedPlugins {} 
    bool SetPlugin() {..} 
    ... 
} 

class BasePlugin {} 
class MyPlugin : BasePlugin {} 

entre autres amincit, il gère l'affichage le plug-in/site choisi.

Jusqu'à présent, je n'avais jamais besoin de communiquer entre 2 plugins ou plus. Maintenant je fais et je voulais vous demander, comment feriez-vous cela.

Mon opinion était d'ajouter en Event à une certaine façon, la classe BasePlugin et la poignée dans PluginsManager classe, que le plug-in élever le Event fournirait dans les EventArgs les types de tous les autres Plugins qui devraient être touchés et une liste de delegates pointant sur les méthodes à exécuter.

Avez-vous une idée? Je vous remercie !

+0

Quel type de communication? Un appel de méthode simple, une messagerie complexe, etc.? –

+0

Disons un appel de méthode simple! –

Répondre

2

Regardez le "Chain Of Responsibility" Pattern. Le plug-in appelle le gestionnaire pour obtenir des informations de n'importe où. Le gestionnaire demande à chaque plug-in de placer les informations dans une interface fournie. (Quelle est une sorte de Visitor Pattern).

Salue Flo

+0

J'ai suggéré le modèle Mediator, qui est une méthode «push» (le plug-in transmettrait des informations), alors que vous avez suggéré Chain of Responsability comme une méthode «pull», à laquelle je n'aurais jamais pensé! +1 pour vous –

+0

@Dr Herbie: et +1 pour vous pour une autre bonne idée :-). Comme vous l'avez déjà mentionné, cela dépend toujours. –

1

Sonne comme un Mediator Pattern possible pour moi (voir aussi here pour une description avec le code C#).

Une classe de médiateurs gère les communications entre les autres classes. Votre classe PlugInManager aurait une instance privée Mediator et tous les plug-ins seraient enregistrés auprès du médiateur pour recevoir des communications.

Il y a probablement 101 façons de le faire, alors attendez-vous à une variété de réponses.