Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top