2010-03-19 2 views
6

우선, System.ComponentModel.Component에 대해 이야기 할 것입니다. .NET Component Model 별도의 Components을 정의하는 (사이트 서비스를 통해) 기능을 제공하는.NET 구성 요소 모델 설명

당신은, 내가 이해, 알고, 그래서 그들은 느슨하게 결합 된 방식으로 서로 통신 할 수 있으며, 각 Component 것을 쉽게 교체 할 수 있습니다.

하지만 내 요점은 내가 다른이를 달성 할 수있다 : 나는 오른쪽 Object Oriented Programming 방식으로 SW를 설계하면 내 말은, 내가 Abstract classes, Interfaces 등의 수단으로 언급 한 모든 기능/상호 운용성을 달성 할 수있다.

언제 부품 모델을 사용해야합니까?

답변

5

글쎄, 자신의 기본 클래스, 인터페이스 등으로 할 수 있습니다. 실제로 System.ComponentModel 의 내용은입니다. 그것은 인터페이스와 기본 클래스의 공통 세트이므로 구성 요소를 구현하고 다른 사람들의 구현과 함께 사용할 수 있습니다.

방금 ​​자신 만의 기본 클래스와 인터페이스를 구성한 경우 코드와 상호 작용하려는 모든 사용자가 클래스를 사용해야합니다. 그리고 한 번에 두 개의 다른 공급 업체의 구성 요소와 통합하려는 경우 어떻게해야합니까?

특히 WinForms의 모든 항목은 System.ComponentModel 항목을 사용하여 양식에 넣을 수있는 컨트롤을 구현합니다. 그들은 을 선택해야만했습니다.이를 표현하기 위해 인터페이스가 필요합니다. System.ComponentModel에 정의 된 이유는 무엇입니까? 이미 잘 설계된 이미 완벽하게 설계된 것이 있다면 왜 스스로를 만들겠습니까?

2

이렇게하면 디자인 타임 등을 제공 할 수 있습니다. 비주얼 스튜디오.

"System.ComponentModel 네임 스페이스에는 구성 요소 및 컨트롤의 런타임 및 디자인 타임 동작을 구현하는 형식이 들어 있습니다." 제공하는 기능은 무엇이든 가능합니다 (BackgroundWorkerComboBox과 매우 다른 어떤 것을하지만 아직 그들은 모두 Component입니다).

ComponentModel이 제공하는 것은 메타 데이터이며 비주얼 디자이너에서 사용할 수있는 구성 요소를 디자인 할 수있는 이점이 있습니다. 따라서 :

public interface IDesigner : IDisposable { 

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

네임 스페이스는 속성에 디자인 타임 액세스를 다시 사용할 수는 TypeDescriptor를/변환기 물건을 제공합니다.

(IoC 컨테이너의 일종으로 System.ComponentModel을 사용할 수 있다고 제안되었지만, 아무도 본 적이 없으며, 말한대로 좋은 디자인을 제공하지는 않습니다.)

그래서 구성 요소에 IDesigner을 제공하려는 경우 System.ComponentModel.Component를 사용해보십시오.