2010-03-19 3 views
6

Прежде всего, я должен сказать, что я собираюсь поговорить о System.ComponentModel.Component..NET Component Model explain

Вы знаете, я понимаю, что .NET Component Model предоставляет возможность (с помощью служб сайта), чтобы определить отдельный Components, так что они могут взаимодействовать друг с другом в слабосвязанном образом, и что каждый Component легко заменяется.

Но моя точка, что я могу добиться этого иначе: Я имею в виду, если я дизайн SW в правильных Object Oriented Programming образом, я могу с помощью Abstract classes, Interfaces и т.д. достичь все упомянутой функциональность/совместимости.

Тогда ПОЧЕМУ и КОГДА я должен полагаться на компонентной модели?

ответ

5

Ну, вы можете сделать это с помощью своих базовых классов, интерфейсов и так далее. Фактически, это именно то, что материал в System.ComponentModel равен. Это общий набор интерфейсов и базовых классов, чтобы вы могли реализовать свои компоненты и использовать их с реалиями других людей.

Если вы только что создали свои базовые классы и интерфейсы, то любой, кто хотел бы взаимодействовать с вашим кодом, должен был бы использовать ваши классы. И что, если они захотят интегрироваться сразу с двумя компонентами поставщика?

В частности, все содержимое в WinForms использует материал System.ComponentModel для реализации элементов управления, которые вы можете поместить в свою форму. Им пришлось выбрать интерфейс, чтобы представить это, так почему бы не определить тот, который определен в System.ComponentModel? Зачем им строить свои собственные, когда уже есть хорошо спроектированный, уже доступный?

2

Это позволяет предоставить Время разработки для использования, например. Visual Studio.

«Пространства имен System.ComponentModel содержат типы, которые реализуют поведение компонентов и элементов управления во время выполнения и времени разработки». Функцией, которую вы предоставляете, может быть что угодно (BackgroundWorker делает что-то очень отличное от ComboBox, но они оба являются Component).

Что представляет собой ComponentModel - это метаданные, а выигрыш в том, что вы можете проектировать компоненты, которые могут использоваться в визуальном дизайнере. Следовательно:

public interface IDesigner : IDisposable { 

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

Пространство имен также содержит материал TypeDescriptor/конвертора, снова использовать для доступа во время разработки к свойствам.

(Предполагается, что вы можете использовать System.ComponentModel как своего рода контейнер IoC. Я никогда не видел, чтобы кто-то это делал, как вы говорите, для этого он ничего не предлагает по простому хорошему дизайну).

Итак: рассмотрите возможность использования System.ComponentModel.Component, если вы также хотите предоставить IDesigner своим компонентом.