Объяснение модели компонентов .NET - PullRequest
8 голосов
/ 19 марта 2010

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

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

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

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

Ответы [ 2 ]

6 голосов
/ 19 марта 2010

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

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

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

2 голосов
/ 09 ноября 2012

Это позволяет вам предоставить Время разработки возможность использования, например, в. 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 / Convertor, который снова используется для доступа к свойствам во время разработки.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...