2011-03-25 5 views
3

밥상을 채우기모범 사례/패턴 '뷰 모델'객체

나는 '뷰 모델'객체를 통해 도메인 오브젝트/데이터 소스에서 데이터를 변환하는 패턴이나 모범 사례를 알아 내려고 노력하고있어. 내 특정 예에서 도메인 개체는 WCF 프록시 개체입니다. WCF 메소드에 대한 호출은 결국 'ViewModel'객체로 전송되는 프록시 객체를 채 웁니다. Architectural diagram

이 Microsoft 문서의 내용을 참조하십시오. http://msdn.microsoft.com/en-us/magazine/dd419663.aspx 리포지토리 패턴 사용에 대해 이야기합니다. '데이터 모델 및 저장소'섹션에 언급되어 있습니다. 그게 최선의 접근 방법인가요? 누군가가 조언 해 줄 수 있습니까?

도먼

+0

드릴 다운 할 수 있도록 클래스 다이어그램을 추가하고 있습니다. [클래스 다이어그램] (http://flic.kr/p/9tpBQN) 의견에 동의합니까? B : (이미지 참조) – dormantroot

답변

1

예, 저장소가 있어야합니다. 그러면보기 모델을 쉽게 테스트 할 수있는 장점이 있습니다. 나중에 다른 종류의 저장소로 쉽게 전환 할 수 있습니다.

제공 한 기사의 관점에서 볼 때, 뷰 모델 논리를 단위 테스트하는 이점이 있습니다. 나중에 XML 파일 저장소에서 SQL 서버 저장소로 전환 할 수 있습니다 (예를 들어).

ViewModel에 추상 저장소를 주입했는지 확인하십시오.

+0

Tengiz ... 저는 저장소 패턴이 데이터 소스 측에만 적용될 것이라고 생각합니다. 필자의 경우 데이터가 검색되고 삽입되는 WCF 레이어가 될 것입니다. 어떻게 생각해? 클래스 다이어그램을 참조하십시오. 우리는 어디에서나 저장소 패턴을 적용 할 수 있습니까? 저에게 알려주세요. 감사. – dormantroot

+0

dormantroot : 도메인 (비즈니스) 계층에서 wcf가 반환하는 데이터를 조작하면 안됩니다. 대신 wcf 레이어를 데이터 액세스 레이어로 간주하여 데이터를 가져옵니다. 따라서 최소한 wcf가 반환 한 객체를 래핑하는 도메인 데이터 객체를 만들어야합니다 (실제로 wcf 객체를 검색 후 도메인 객체로 변환하는 것이 좋습니다). 따라서 wcf 대신 도메인 객체로 작업해야합니다. 말이된다? – Tengiz

+0

Tengiz : 예 맞습니다! 나는 WCF 객체를 직접 사용하지 않을 것이다. 나는 분명히 도메인 객체의 레이어를 만들 것이다. 내가 가지고있는 클래스 다이어그램은 책의 예제를 기반으로했습니다. 따라서 WCF 객체 ----> 도메인 객체 -----> ViewModel --->보기가됩니다. 그래서 WCF 객체와 도메인 객체가 느슨하게 결합되도록 어떤 패턴을 사용할 수 있습니까? – dormantroot

2

저장소 패턴 (당신의 WCF 안에 무엇을) 데이터 액세스 레이어와 관련이 있습니다. 이것은 프리젠 테이션 레이어와 아무 관련이 없습니다.

데이터베이스 스키마를 고려하지 않고 UI 요구 사항에 따라 MVC 프로젝트에서 Model 및 ViewModel 클래스를 선언하는 것이 좋습니다. 그런 다음 AutoMapper을 사용하여 WCF 프록시 클래스에서 모델로 값을 복사하는 데 필요한 코드를 단순화 할 수 있습니다. AutoMapper 코드에서 나머지 앱을 보호하는 Adapter 클래스에이 코드를 캡슐화 할 수 있습니다.

편집 :

는 모델 클래스로 WCF 프록시를 사용하지 마십시오. UI를 기반으로 별도의 모델 클래스를 선언하고 AutoMapper를 사용하여 서로간에 데이터를 복사하십시오.

+0

답장을 보내 주셔서 감사합니다. 첨부 된 클래스 다이어그램 (주석 A :)을 참조하십시오 ..... 어댑터 패턴이 계속 적용됩니까? – dormantroot

+0

감사합니다 Jakub ... 네, 맞습니다! 나는 WCF 프록시 객체를 사용하지 않을 것이다. 나는 책에서 발견 한 모범을 언급하고있었습니다.그래서, 당신의 코멘트로 돌아가서, 내가 제대로 이해한다면, 나는 이런 식으로 일을 할 것입니다 : WCF <---->> AutoMapper <<-----> 도메인/모델 객체 ------> ViewModel -----> View, correct? 그렇다면 AutoMapper를 통해 WCF 객체를 Domain/Model 객체와 결합하는 문제가 발생합니다. 어떻게 생각해? – dormantroot

+0

또한 B (클래스 다이어그램에서)에 대한 의견은 어떻습니까? – dormantroot

0

간단하게 유지하고 수업 당 하나의 책임을 지닙니다.

이것은 프록시 (통신 객체)에서 반환 한 객체와 ViewModel (객체보기)에서 사용한 객체를 구분합니다. 이 방법으로 클라이언트 측 로직은 통신/전송 방법에서 분리됩니다.

UI 요소와 밀접한 관련이있는 WCF 서비스가있는 경우 CO에서 VO로 번역하면됩니다. 뷰가 VO에 바인딩되어 있으므로 뷰가 업데이트됩니다.

클라이언트에 비즈니스 또는 도메인 논리를 삽입해야 할 경우 중간 도메인 개체로 변환하십시오. 그런 다음 객체가 다른 도메인 모델 객체 (소위 말하는 저장소의 저장소)와 상호 작용하도록합니다. VO는 도메인 변경 내용을 청취하고 이에 따라 대응해야합니다. 이 패턴은 도메인 객체가 WCF 나 WPF에 의존하지 않는다는 것을 나타냅니다.