문제

WPF의보기 모델 지향적 인 일을하는 방법은 UI에서 비즈니스 객체를 사용하는 것이 매우 유혹적입니다. 이것에 대한 문제가 있습니까? 왜 또는 왜 그렇게하지 않겠습니까?

도움이 되었습니까?

해결책

Microsoft의 제품 팀 (예 : Blend 팀이 사용하는 것)의 지침은 인기있는 MVC 패턴의 변형 인 Model-View-ViewModel 아키텍처입니다. 좋은 출발점은입니다 http://blogs.msdn.com/johngossman/archive/2005/10/08/478683.aspx. 이 주제에 대한 WPF 박사의 좋은 기사도 있습니다.

본질적으로, 그들은 관측형 수집 등과 같은 바인딩 친화적 인 비즈니스 객체를 사용하는 뷰 모델 레이어를 만들도록 옹호합니다.

또한 결국 Silverlight 2로 이동할 수 있다면 UI 계층에서 비즈니스 객체를 유지하여 UI 기술을 교체 할 수 있습니다 (WPF 및 Silverlight가 소스 코드 호환 될 때까지).

다른 팁

나는 그것을 다른 빛으로 본 것 같아요. 나는 가능한 한 UI에서 많은 것을 유지하려고 노력하여 필요한 UI 프리젠 테이션 (예 : 웹, WPF, WinForms)을 사용할 수 있습니다. 프레젠테이션 계층의 비즈니스 로직이 많을수록 다른 UI로 마이그레이션하면 나중에 다시 작성해야 할 수도 있습니다.

UI에 비즈니스 개체를 갖는 것은 문제가 아닙니다. 보기 그들을. 다시 말해, 속성을 변경하거나 삭제하거나 새 특성을 만들려면 컨트롤러, 발표자 또는 그 일에 메시지를 보내야합니다. 그런 다음 결과는보기에서 업데이트되어야합니다.

당신이 그렇지 않아야합니다 사용하는 것입니다 ToString 객체 (또는 객체의 다른 방법 또는 속성)의 방법은보기에 나타나는 방법에 영향을 미칩니다. 당신은 사용해야합니다 DataTemplates 당신의 객체의 관점을 나타내는 s. 더 복잡한 표현이 필요하면 IValueConverter 객체를 시각적 표현으로 변경합니다.

WPF 전문가가 아닌 것은 확실하지 않지만 M, V 및 C를 분리하는 일반적인 이유는 컨트롤러를 뷰와 다른 방식으로 테스트 할 수 있기 때문입니다.

물론 당신을 막을 수는 없지만 별도의 경우 훨씬 더 테스트 가능합니다 (예 : 단위 테스트). MS가 일반적으로 홍보하는 MVP 패턴은 발표자 (즉, WPF 양식)를 통제하는 데 더 많은 장비가 있으며 더 많은 제어 기능이 있습니다 ....

응용 프로그램 아키텍처 또는 구성 요소 및 개체를 재사용하려는 방식에 따라 사용자 인터페이스 (이 경우 WPF)에서 어느 정도의 독립성을 선택할 수 있습니다.

다음은 내 경험의 샘플입니다.

나는 비즈니스 계층이 이미 정의 된 비교적 작은 프로젝트에서 WPF와 함께 일했으며 사용자 인터페이스를 만들어야했습니다. 물론, 인터페이스는 그것이 작동하는 자체 규칙과 개체를 정의했으며, 응용 프로그램은 UX에 대해서만 정의 되었기 때문에 대부분 확장하여 우리 자신의 특정 객체를 만들기 위해 선택한 것입니다. DependencyObject (주로 Data Binding 목적).

어떤 사람들은 직렬화 할 수 없기 때문에 (실제로는 - XAML에) 종속성 객체를 사용하는 것이 좋지 않다고 주장 할 수 있습니다. System.Windows 네임 스페이스) 및 기타 주장. 또한, DependencyObjects 다른 옵션을 지원합니다 첨부 된 속성그리고 의존성 속성. 다른 사람들은 예를 들어 사용하고 싶을 수도 있습니다 INotifyPropertyChanged 그것이 의미가 있다면, 다른 패턴은 이러한 모든 패턴이 UI 이외의 다른 층에 속하지 않는다고 말할 수 있습니다. (더 배우고 싶다면 좋은 WPF가 있습니다. 데이터 바인딩 기사 Perfomance 및 사용자 인터페이스 용 모범 사례를 포함한 MSDN 라이브러리에서

Microsoft가 어떤 음식을 System.Windows 예를 들어, 네임 스페이스는 System.ComponentModel 제 생각에는 그들이 WPF뿐만 아니라 .NET 프레임 워크에 이러한 모든 중요한 패턴을 제공함으로써 더 유용했을 것입니다.

물론 이것은 단지 시작일 뿐이며 많은 사람들이 결국 올바른 방향으로 진화 할 것이라는 것을 알고 있습니다. (주제를 벗어날 위험이 있습니다 : 예를 들어 Silverlight 2.0 프레임 워크를 가져 가십시오. WPF 모델의 일부 객체가 누락되고 일부는 자연스러운 장소에 있지 않은 서두르는 릴리스였습니다.)

결국, 모든 것은 당신, 프로그래밍 스타일, 건축 결정 및 기술에 대한 지식에 달려 있습니다.

책보다 어떤 식 으로든 그렇게하는 것이 더 자연스럽게 보인다면 생각하십시오. why you should 그리고 why should you not 결정을 내리기 전에!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top