Frage

Zunächst einmal muss ich sagen, dass ich über System.ComponentModel.Component zu reden werde.

Sie wissen, ich verstehe, dass die .NET Component Model Fähigkeit bietet (durch Site Service) getrennten Components zu definieren, so dass sie miteinander in einer losen gekoppelten Art und Weise kommunizieren können, und dass jeder Component ist leicht austauschbar.

Aber mein Punkt ist, dass ich das sonst erreichen kann: Ich meine, wenn ich die SW in die richtige Object Oriented Programming Weise entwerfen, kann ich mittels Abstract classes, Interfaces usw. erreichen alle genannten Funktionen / Interoperabilität.

Dann und WHEN sollte ich vertrauen auf das Komponentenmodell?

War es hilfreich?

Lösung

Nun, können Sie es mit Ihrer eigenen Basisklasse tun, Schnittstellen und so weiter. In der Tat, das ist genau das, was das Zeug in System.ComponentModel ist . Es ist eine gemeinsame Reihe von Schnittstellen und Basisklassen, so dass Sie Ihre Komponenten und umsetzen können verwenden, um mit anderen Menschen Implementierungen.

Wenn Sie gerade Ihre eigenen Basisklassen und Schnittstellen, dann alle, die mit Ihrem Code verbinden wollten müßte Ihre Klassen verwenden. Und was, wenn sie wollten, mit zwei verschiedenen Lieferanten Komponenten integrieren, auf einmal?

Insbesondere alle von dem Zeug in WinForms verwendet die System.ComponentModel Sachen Kontrollen zu implementieren, dass Sie auf dem Formular platzieren können. Sie hatten wählen einige Schnittstelle, das repräsentieren, also warum nicht derjenige definiert in System.ComponentModel? Warum sollten sie ihre eigenen bauen, wenn es bereits sehr gut gestaltete man bereits verfügbar?

Andere Tipps

Es läßt Sie bieten Entwurfszeit Fähigkeit zur Verwendung in z.B. Visual Studio.

„Die System.ComponentModel Namespaces enthalten Typen, die die Laufzeit und Entwurfszeitverhalten von Komponenten und Steuerungen implementieren.“ Die Funktionalität, die Sie zur Verfügung stellen könnte alles sein (BackgroundWorker tut etwas ganz anderes zu einem ComboBox doch sind sie beide ein Component).

Was der ComponentModel bietet, ist Metadaten und die Auszahlung ist, dass Sie Komponenten entwerfen können, die in dem visuellen Designer verwendet werden können. Daraus folgt:

public interface IDesigner : IDisposable {

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

Der Namespace stellt auch die TypeDescriptor / Convertor Sachen, wieder verwendbar für Design Zeit-Zugriff auf Eigenschaften.

(Es wurde vorgeschlagen, dass Sie System.ComponentModel als eine Art IoC-Container verwenden könnte ich habe noch nie jemanden gesehen, tun dies,., Wie Sie sagen, denn das ist es nichts bietet über nur gutes Design).

Also: prüfen, mit System.ComponentModel.Component, wenn Sie auch sind, wollen eine IDesigner mit Ihrer Komponente liefern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top