0

MVVM 디자인 및 데이터 바인딩을 기반으로하는 WPF GUI 응용 프로그램이 있습니다. 이제 Windows 서비스, 콘솔 UI 앱 또는 WinForms 앱에서 핵심 코드 (즉, 데이터 모델)를 재사용하고 싶습니다.다른 응용 프로그램 프레임 워크에서 사용할 수 있도록 데이터 모델을 설계하는 방법은 무엇입니까?

그런 디자인이 합리적입니까? 그렇다면 함정은 무엇입니까?
대신 독립형 데이터 모델을 만들고 래퍼를 통해 WPF를 인터페이스해야합니까?

UPDATE :

미안 해요, 난 더 정확한되어 있어야합니다. 내가 분명히 말하자면, 나는 모듈성의 문제를 의심하지 않는다.) 내 관심사는 현재의 DataModel이 INotifyPropertyChanged을 구현하고, DispatcherTimers 등을 사용하는 것으로 귀결된다. - 그 모든 것 비 GUI이지만 WPF는 여전히이다. 모델의 비즈니스 로직은이를 기반으로합니다.

(GUI가 아닌 WPF) 디자인은 앞에서 설명한 경우 재사용이 가능합니까? 아니면 WPF에 대한 참조가 전혀 필요하지 않을 때까지 추상화해야합니까?

+0

[귀하의 질문은 다소 주관적인] (http://stackoverflow.com/help/dont-ask) 커뮤니티에서 삭제되거나 답변을 얻지 못하더라도 놀라지 마십시오. 당신은 * 항상 두 개의 프레임 워크로 모델을 구현해 볼 수 있고 그것이 작동 하는지를 볼 수 있습니다 ... 왜 그렇게되지는 않을지는 알 수 없습니다. – Sheridan

+1

@Sheridan Rubbish, 선생님! 도메인 코드와 프리젠 테이션 코드를 분리 할 때 달성 가능하고 문서화되며 측정 가능한 이점이 있습니다. – Gusdor

+0

@Gusdor, 정확히 내가 말한 것은 '쓰레기'라고 나에게 설명해 주시겠습니까? 나는 * 당신 *이 나의 코멘트를 놓치고 읽었을지도 모른다라고 생각한다. – Sheridan

답변

2

예, 이것은 완벽하게 수용 가능하며 대부분의 경우 바람직합니다.

당신이 MVVM 응용 프로그램을 구축

는, 적어도 3 개 공식적인 층에 있어야합니다 :

  • 프리젠 테이션 WPF, UI, XAML, 행동. 그 모든 것들. 재사용 불가
  • 응용 프로그램 응용 프로그램 규칙을 지원하는보기 모델 및 구조. 그 모든 것들. 재사용을 목적으로하지 않음
  • 기초 데이터베이스 액세스, 비즈니스 개체. 도메인 특정 알고리즘. 이상적이 비트는 재사용 어딘가에

기초 층 영리 비트이다이어야한다. 이것은 응용 프로그램 샌드위치의 고기가있는 곳입니다. 이것이 UI 기술에 완전히 불가 지론이되는 것은 완벽합니다. WPF, winforms, ASP. UI가 필요하지 않아야합니다. 질문 업데이트

편집 : 때때로 당신은 결과의 그룹화/필터링 뷰 모델에 CollectionViewSource을 필요로하기 때문에

WPF에 대한 모든 참조를 제거하기는 어렵다. WPF 클래스입니다.

'wpf를 참조하지 마라.'라는 우려를 표출하는 것은 매우 유혹적이며 그로 인해 어려움을 겪을 수 있습니다. 대신, 당신이 입력하는 행동의 유형으로 훈련을 시도하십시오. 당신이보기 모델에서 '영리한'(도메인) 코드를 작성하는 경우, 그것을 비즈니스 오브젝트 방법 또는 확장으로 기초 계층으로 이동하십시오. 마찬가지로, IValueConverter을 종종 구현하는 경우 뷰 모델을 더 잘 활용해야합니다.

확실한 점은 기초 레이어가 절대로 WPF를 참조해서는 안된다는 것입니다.

+0

나는 응용 프로그램 계층을 재사용 할 수 없다는 것에 동의하지 않습니다. ViewModels는 UI에 독립적이며 모든 UI 기술에서 재사용 할 수 있습니다. WPF와 같은 ViewModel을 ASP.Net MVC로 이식하는 것은 쉬운 일이 아니지만, 요점은 여전히 ​​있습니다. –

+0

나는 겹겹이있는 것에 확실히 동의합니다. 업데이트 된 질문을하시기 바랍니다. – vines

+0

@HighCore 전에이 대화를 해봤을 것입니다. 보기 모델은 자주 업데이트하는 빈도, 사용자 변경 내용을 적용 할시기, 탐색 스타일 등을 작성중인 응용 프로그램의 _ 모드에 맞게 조정됩니다. 전화 응용 프로그램은 데스크톱 응용 프로그램과 공유 할 수 없습니다. "전문가"(MVVM에 관한 책을 쓰는 사람들)는 어셈블리에 복잡성을 추가하기 때문에 재사용을위한 설계를 권장하지 않습니다. 필자는 넓은 범위의 뷰 모델을 설계하는 데 사용되었지만 유지 관리에 큰 어려움을 겪었습니다. – Gusdor

1

이러한 디자인은 매우 합리적입니다! 모델을 포함 할 수있는 WPF, WinRT, ASP MVC 등 모든 .NET 기술에 대해 이식 가능한 C# 라이브러리를 만들 수 있습니다. 분명히 이러한 휴대용 모델을 뷰 모델로 포장해야하지만 IPropertyChanged는 모든 XAML 형식으로 구현됩니다.

+0

Windows 서비스도 의미합니까? 서비스에서 WPF에 대한 참조를 갖는 것이 주요 관심사입니다. – vines