2010-03-19 19 views
6

Tout d'abord, je dois dire que je vais parler de System.ComponentModel.Component.. Explication du modèle de composant .NET

Vous savez, je comprends que la .NET Component Model fournit la capacité (par le biais du site Services) pour définir Components séparés, afin qu'ils puissent communiquer entre eux de manière à couplage lâche, et que chaque Component est facilement remplaçable.

Mais mon point est que je peux y parvenir autrement: Je veux dire si je conçois le SW de la bonne manière Object Oriented Programming, je peux au moyen de Abstract classes, etc. Interfaces obtenir toutes les fonctionnalités/interopérabilité mentionnées.

Alors POURQUOI et QUAND dois-je compter sur le modèle de composants?

Répondre

5

Eh bien, vous pouvez le faire avec vos propres classes de base, interfaces et ainsi de suite. En fait, c'est exactement ce que les choses dans System.ComponentModel est. C'est un ensemble commun d'interfaces et de classes de base afin que vous puissiez implémenter vos composants et les utiliser avec les implémentations d'autres personnes.

Si vous venez de créer vos propres classes de base et interfaces, alors quiconque voudrait s'interfacer avec votre code devra utiliser vos classes. Et s'ils voulaient s'intégrer à des composants de deux fournisseurs différents en même temps?

En particulier, tous les éléments de WinForms utilisent les éléments System.ComponentModel pour implémenter les contrôles que vous pouvez placer dans votre formulaire. Ils devaient choisir une interface pour représenter cela, alors pourquoi pas celle définie dans System.ComponentModel? Pourquoi construiraient-ils les leurs, alors qu'il y en a déjà un bien conçu?

2

Il vous permet de fournir au moment de la conception pour une utilisation par ex. Visual Studio. "Les espaces de noms System.ComponentModel contiennent des types qui implémentent le comportement au moment de l'exécution et au moment du design des composants et des contrôles." La fonctionnalité que vous fournissez peut être quelque chose (BackgroundWorker fait quelque chose de très différent d'un ComboBox mais ils sont tous les deux un Component).

Ce que le ComponentModel fournit est des métadonnées et le gain est que vous pouvez concevoir des composants qui peuvent être utilisés dans le concepteur visuel. Par conséquent:

public interface IDesigner : IDisposable { 

     IComponent Component {get;}   
     DesignerVerbCollection Verbs {get;} 
     void DoDefaultAction(); 
     void Initialize(IComponent component); 
} 

L'espace de noms fournit également les choses TypeDescriptor/Convertor, encore une fois utilisable pour un accès en temps de conception aux propriétés.

(Il a été suggéré que vous pourriez utiliser System.ComponentModel comme une sorte de conteneur IoC.Je n'ai jamais vu quelqu'un faire cela, comme vous le dites, pour cela il ne propose rien de plus qu'un bon design). Donc: pensez à utiliser System.ComponentModel.Component lorsque vous souhaitez également fournir un IDesigner avec votre composant.