2009-10-19 5 views
4

WPF/WCF/NHibernate/등에서 대규모 응용 프로그램을 개발 중입니다. 핵심 아키텍처로 MVP 패턴을 구현했습니다 (이 질문은 여전히 ​​MVC와 관련 있음).WPF C# MVC/MVP 패턴 및 사용자 제어 코드 숨김

핵심 아키텍처 (컨트롤러, 뷰 등)에 관한 한, 기능을 추가하고 특정 비트와 조각을 다시 변경하고 변경하는 것이 자연 스럽습니다.

그러나 내가 만든 사용자 지정 사용자 정의 컨트롤의 코드 숨김 기능은 구현 된 MVC/MVP 패러다임을 "손상"시키는 것처럼 느껴질 수 있습니다. 코드에서 디자인의 누출과 디자인의 누수가 코드에서 누출 될 수 있습니다. 다시 설명하겠습니다. 이것은 사용자 컨트롤에만 해당됩니다. 이 코드 숨김 모델 (ASP.NET과 WPF 모두)이 '나쁜 것'이지만 내 견해에 상관없이 나는 그것에 매달려있다.

이러한 시나리오의 모범 사례에 대한 권장 사항은 무엇입니까? 그런 걱정을 어떻게 처리합니까? 예를 들어 사용자 정의 컨트롤의 코드 숨김 문제를 해결하려면 어떻게해야합니까?

답변

1

WPF를 사용하고 있으므로 실제로는 MVVM (Model-View-ViewModel) 패턴을 조사해야합니다. 이것은 Martin Fowler으로 논의 된 Presentation Model (PM) 패턴의 한 형태입니다. WPF는 바인딩 지향적이며 XAML을위한 매우 강력하고 풍부한 데이터 바인딩 프레임 워크를 제공합니다. MVVM을 사용하면 View에서 ViewModel을 완전하고 완전히 분리 할 수 ​​있으므로 궁극적으로 관심사와 단위 테스트 가능성을 제공하는 진정한 POCO UI 개발이 가능합니다.

MVVM을 사용하면 Windows, UserControls 등 모든보기를 모듈을 구동하는 코드에서 모듈화하고 분리 할 수 ​​있습니다. 코드 생성에는 자동으로 생성되는 것 외에 다른 논리가 없어야합니다. 처음에는 약간 힘들지만 다음 링크를 통해 시작해야합니다.

WPF + MVVM은 정면 학습 곡선의 비트를 가지고 있지만, 초기 장애물을 극복하면, 당신은 다시는보고 싶지 않을 것입니다. WPF 및 MVVM의 구성 가능성, 결합 상실, 데이터 바인딩 및 원시 기능은 놀랍습니다. UI를 사용하면 이전보다 훨씬 자유 로움을 누릴 수 있으며 실제로 코드를 뒤죽박죽 처리해야하는 경우는 거의 없습니다.

+0

링크를 가져 주셔서 감사합니다. –

0

사용자 지정 컨트롤은 항목을 표시합니다. 그 점에서 그들은 버튼이나 드롭 다운 콤보 상자와 다르지 않습니다. 트릭은 물건을 직접 처리하지 못하게하는 것입니다. 그들은보기 인터페이스를 통해 물건을 보내야하고 발표자는보기 인터페이스를 통해 마찬가지로 상호 작용해야합니다.

이렇게 생각하십시오. MVP를 무시하면 사용자 정의 컨트롤이 특정 방식으로 모델과 상호 작용합니다. MVP로하고있는 일은 그 길을 가져 와서 View Interface로 정의하는 것입니다. 그렇습니다. 추가 호출 레이어를 추가하고 있지만 나머지 시스템과 어떻게 상호 작용하는지 철저하게 문서화하는 것이 장점입니다. 또한 당신은 그것을 찢어 버리고 완전히 다른 무언가로 대체 할 수 있다는 이점을 얻습니다. 모든 새로운 일은 뷰 인터페이스의 일부인 구현입니다.

구체적인 예가 있으면 더 잘 설명 할 수 있습니다.

1

필자는 코드 숨김 (다른 개인 의견)을 좋아하지만, 컨트롤 이벤트와 나머지 응용 프로그램 간의 상호 작용을 촉진하기 만하면됩니다. 나는 많은 반대 사례를 보았다는 것을 인정할 것이다. 나는 그 중 몇 개를 썼다. ...

정말로, 모든 코드 숨김은 "오, 누군가이 버튼을 클릭했을 것입니다. 아마도 그것에 대해 알고 싶어하는 것이 있습니다." PRISM (MS 패턴 및 관행에서 제공)은 WPF 및 Silverlight에 대한 많은 아키텍처 인프라를 제공합니다. 여기에는 게시자/구독자 인터페이스가 포함되어있어 컨트롤 및 코드 숨김이 가능한 구독자를 인식하지 못하고 이벤트를 게시하거나 구독자가 이벤트로 수행 할 수있는 작업을 게시 할 수 있습니다. PRISM은 Silverlight에 대한 명령도 추가합니다.

WPF 및 Silverlight 용 MVC의 일반적인 변형은 MVVM (Model, View, ViewModel)입니다. ViewModel은 가장 유용한 몇 가지 형식 (예 : 양방향 바인딩을 용이하게하기 위해 ObservableCollections)으로 사용자 컨트롤에서 데이터를 사용할 수 있도록합니다.