2009-03-09 4 views
0

저는 문서 편집을 위해 MVC/MVP GUI에서 작업하고 있습니다. 문서는 트리 구조를 가지며, 일부 노드는 텍스트를 나타내고 다른 노드는 이미지를 나타냅니다. 앱 모델에는 명령 스택이 포함되어 있으며 명령이 모델에서 직접 작동합니다.MVC 또는 MVP 앱에서보기 및 컨트롤러를 만들기위한 패턴은 무엇입니까?

노드마다 근본적으로 다른 컨트롤이 있으므로 각 노드마다 개별 MVC/MVP 트리 어드를 구현할 계획입니다. 문제가있는 부분은 피어 V 및 C 구성 요소의 생성 및 제거를 동기화하는 방법입니다.

내 아이디어 :
- 그 이벤트를 기반으로 동료를 생성 한 후 "childAdded"유형의 이벤트에 대한 각 노드에서 듣고,
- 또한 동료를 만들 모델의 노드를 만드는 공장을 사용하고, 그 공장

동적 뷰/컨트롤러 생성을위한 일반적인 패턴 또는 모범 사례는 무엇입니까?

답변

1

내가이 INodeView 인터페이스

한 방법을 구현하는 것이 노드를 표시하는 다음

양식을 할 것 특정 질문에 대해서는이 site

에서 UI 패턴의 일부보고 추천 INodeTreeForm 인터페이스의 경우 개별 노드를 추가 할 수 있습니다. 그것은 NodeTreeScreen 객체에서 생성 된 Node 클래스를 전달할 것입니다. 두 가지 핵심 자산이 있습니다. 첫 번째 노드는 노드의 키이고 두 번째 노드는 노드 유형입니다.

키가있는 컨트롤에 필드가있는 방식으로 노드를 추가합니다.

INodeTreeForm 인터페이스와 함께 INodeView 인터페이스가 있습니다. 이것은 뷰 영역이나 전환 할 새 양식을 포함합니다.

노드를 클릭하면 NodeTreeScreen에 키가 전달되어 노드 유형이 달라집니다. 그것은 INodeView 객체들의 콜렉션을 가지고 있습니다. INodeView의 속성 중 하나는 노드 유형입니다.

올바른 INodeView를 검색합니다. 현재의 INodeview를 닫고, 현재의 INodeView를 검색 한 노드로 설정하고, 노드에 전달하고, 자신에게 표시되도록 지시합니다.

당신은 INodeView가 말하는 것을 선택할 수 있습니다. 서로 다른 유형별로 양식/컨트롤을 등록 할 수 있습니다. 예를 들어, INodeViewText, INodeViewImage 등. 또는 하나의 옴니버스 INodeViewForm과 INodeView를 구현하는 객체가 실제 그림을 처리하게합니다.

GUI 툴킷에 따라 이것은 하나의 양식이 많은 다른 인터페이스를 구현할 수 있음을 의미 할 수 있습니다.

노드 추가, 삭제 및 생성은 INodeTreeForm을 구현하는 양식과 NodeTreeScreen 간의 상호 작용을 통해 수행됩니다. 이 작업이 수행하는 작업 중에는 모델을 수정하기 위해 이미 생성 한 명령이 실행됩니다.

인터페이스 뒤에 모든 것을 구현하면 나머지 소프트웨어를 엉망으로 만들지 않고도 구현을 변경할 수 있습니다. 서로 다른 인터페이스를 구현하는 객체는 인터페이스를 올바르게 구현하는 한 다른 객체에 영향을주지 않고 변경할 수 있습니다.

이것은 Martin Fowler의 사이트에서 수동보기의 변형입니다.