Question

Tout d'abord, je dois dire que je vais parler System.ComponentModel.Component.

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 de Object Oriented Programming, je peux au moyen de Abstract classes, etc. Interfaces réaliser toutes les fonctionnalités / interopérabilité mentionnés.

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

Était-ce utile?

La solution

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

Si vous venez de faire vos propres classes et interfaces de base, puis tous ceux qui voulaient l'interface avec votre code devrait utiliser vos classes. Et s'ils voulaient intégrer deux composants de fournisseurs différents à la fois?

En particulier toutes les choses dans WinForms utilise les trucs de System.ComponentModel pour mettre en œuvre des contrôles que vous pouvez mettre sur votre formulaire. Ils devaient choisir certains Interface pour représenter, alors pourquoi pas celui défini dans System.ComponentModel? Pourquoi seraient-ils construire leur propre, quand il y a déjà un déjà parfaitement bien conçu?

Autres conseils

Il vous permet de fournir Conception capacité d'utilisation dans, par exemple Visual Studio.

« Les espaces de noms System.ComponentModel contiennent des types qui mettent en œuvre le comportement en temps de conception et d'exécution des composants et des contrôles. » La fonctionnalité que vous fournissez pourrait être quelque chose (BackgroundWorker fait quelque chose de très différent à un ComboBox mais ils sont tous deux Component).

Ce que le ComponentModel fournit des métadonnées est 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 ne l'ai jamais vu quelqu'un le faire,. Comme vous le dites, pour qu'il offre rien sur juste un bon design).

: pensez à utiliser System.ComponentModel.Component lorsque vous souhaitez également fournir un IDesigner avec votre composant.

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