2012-09-06 2 views
0

좋아요, 그래서 MVVMC (또는 MVCVM) 패턴을 사용하여 WPF에서 Microsoft Prism으로 작업하고 있습니다.종속성을 주입해야합니까? 어떻게해야합니까?

내 ChatModule에는 일련의 뷰, ViewModels 및 하나의 컨트롤러가 있습니다. 보기에

나는

  • ChatAreaView이 - 읽을 수 와서 채팅 메시지를 표시합니다. 이것은 TabControl 영역 내부에서 호스팅되므로 사용자와 다른 사용자 또는 파일 전송 창과 같은 다른 사용자와 대화 할 수 있습니다.
  • UserAreaView - 이것은 사용자 목록입니다. 마우스 오른쪽 버튼을 클릭하면 파일을 보내거나 속삭이는 것과 같은 컨텍스트 메뉴가 나타납니다.
  • MessageAreaView - 사용자가 다른 모든 사용자에게 보낼 메시지를 입력하는 곳입니다.

각 뷰에는 해당 ViewModel이 있습니다. ChatAreaViewModel, UserAreaViewModel 및 MessageAreaViewModel. ViewModel에는 기본적으로 속성 만 포함됩니다.

예를 들어, UserAreaViewModel은 기본적으로 이름 인 User 유형의 구조체를 정의합니다. 실제로 이것은 클래스 외부에서 정의되지만 여전히 사용됩니다. 현재 연결되어있는 모든 사용자의 목록을 저장하는 ObservableCollection이 있습니다. 또한 ICommand 속성이 사용자와 상호 작용하도록 정의되어 있습니다. 지금은 SendFile, Whisper 및 Nudge가 있습니다. 앞으로 더 추가 할 생각입니다.

컨트롤러는 이러한 뷰와 ViewModel을 만들고이를 결합합니다. ViewModel을 해당 뷰의 DataContext로 할당하고 ViewModel의 모든 초기 속성을 설정합니다. 모듈 수명 기간 동안, 사용자 상호 작용에 반응하고 각 ViewModel의 ICommand 속성에 할당 된 DelegateCommands를 실행합니다. 이것들은 ViewModel의 프로퍼티의 상태를 변경합니다.

저는 인터페이스 대신보기 및 ViewModels의 실제 유형을 사용하고 있습니다.

#region Views 

ChatAreaView viewChatArea; 
UserListView viewUserArea; 
MessageView viewMessageArea; 
LoginPromptView viewLoginPrompt; 

#endregion 

#region ViewModels 

ChatAreaViewModel viewModelChatArea; 
UserAreaViewModel viewModelUserArea; 
MessageAreaViewModel viewModelMessageArea; 
LoginPromptViewModel viewModelLoginPrompt; 

#endregion 

겠습니까 일들이 훨씬 더 깔끔하고 덜 나는보기 및 ViewModels에 대한 인터페이스를 정의하는 경우 결합, 대신 구체적인 구현의 컨트롤러 내에서 이러한 인터페이스를 조작 할 수? 그런 다음 Module 클래스의 Container에 등록 할 수 있습니까? (본질적으로 각 모듈의 루트입니다)?

나는 이것을 어떻게해야합니까? 다른보기와 구별하기 위해 각보기에 대한 인터페이스를 어떻게 구현합니까? 그들은 실제로 XAML을 제외하고는 아무 것도하지 않습니다 ... 그리고 ViewModel은 특정 속성을 제외하고는 아무 것도하지 않습니다. 이러한 속성은 변경 될 수 있습니다. 예를 들어 UserAreaViewModel에서 사용자가 다른 방식으로 다른 사용자와 상호 작용할 수 있도록 더 많은 명령을 추가하고 싶습니다.

누군가 나를 도와 줄 수 있습니까? 내 마음 속에서 나는이 물건들을 추상화해야한다고 생각하고있다. 그러나 내가 그것에 대해 논해야 할 논리적 인 방법을 정말로 모른다. 또는 그것을하는 것이 현명한 생각이라 할지라도. 나는 무엇을 얻어야합니까?

감사합니다. 아래 이미지는 제가 작업하고있는 것의 예입니다. Add new Item 버튼과 모든것의 스타일을 무시하십시오. 지금 당장 작업하고있는 것이 아닙니다.

Chat Application

느슨하게 결합 된

답변

0
  1. 은 - 미래에 전혀 다른 구현에 전체 클래스를 대체 할 수 있습니다.
  2. 독립적 인 개발 .. 최종 UI가 준비 될 때까지 더미 UI /보기를 삽입 할 수 있습니다. 두 부분은 동시에 (공통 계약을 맺은 후) 진화 할 수 있습니다.
  3. 모듈에 참조를 추가 할 필요가 없습니다 (보기 구현). ConfigurationModuleCatalog를 사용하여 구성 파일에서 유형을 검색 할 수 있습니다.
관련 문제