2011-04-23 7 views
4

우리는 WPF/WCF로 작성된 리치 클라이언트 애플리케이션을 보유하고 있으며 가능한 경우 MVC를 사용하여 ASP.net에 컴패니언 웹 사이트를 만들려고합니다.MVC에서 WPF ViewModels을 재사용 할 수 있습니까?

우리는 현재 코드베이스의 양을 파악하고 (별도의 팀에서) 재사용 할 수 있는지 묻는 질문을 받았으며 ASP.net에 대한 경험이 거의 없습니다.

도메인 모델을 다시 사용 하겠지만 ViewModels의 WPF 특정 부분을 분리하고 MVC의 WPF- 불가 지론 부분을 재사용 할 수 있습니까? 같은 패러다임을 따르고 있습니까? RelayCommands를 명령 전용으로 사용하기 때문에 포함 된 메서드를 ASP.net의 특정 항목으로 쉽게 래핑 할 수 있습니다.하지만 UI 관련 사항은 어떻습니까? ASP.net은 INotifyPropertyChanged를 사용합니까? 또는 UI 업데이트를 어떻게 처리합니까?

답변

3

나를 위해 그것은 어떤 의미가 없습니다. 모델에는 중요한 비즈니스 로직 코드가 모두 포함되어야하며 재사용 가능성이 가장 높아야합니다. 뷰 모델에는 프리젠 테이션 로직 만 포함되어야하며 데스크톱 및 웹 앱과는 매우 다르므로이를 재사용하는 것이 적절하지 않습니다.

웹 응용 프로그램은 기본적으로 상태가 유지되지 않으므로 MVC는 UI 업데이트에 바인딩 메커니즘을 사용하지 않습니다. 실제로 MVC 애플리케이션의 뷰 모델을 사용하게 될 가능성이 높지만 MVC에서는 각 HTTP 요청을 렌더링하기 위해 뷰에 데이터를 제공하기위한 간단한 데이터 전송 객체 (DTO) 역할을합니다. 뷰가 렌더링되면 서버로 돌아가서 뷰 모델을 업데이트하고 뷰를 다시 렌더링해야합니다.

또는 UI 클라이언트 측을 스크립팅으로 업데이트 할 수 있습니다. Knockout.js은 클라이언트 사이드 뷰 모델/뷰 바인딩을위한 멋진 JS 라이브러리입니다.

+0

Ahh okay - 나는 ViewModel이라는 용어를 다시 사용하여 저를 버린 것이라고 생각합니다. 도와 주셔서 감사합니다! – Goblin

+0

당신의 대답을 녹아웃 링크를위한 해결책으로 표시했습니다 :-) 유용 할 것입니다 :-) – Goblin

2

응용 프로그램과 기존보기 모델의 작성 방법에 따라 다르지만 제기하는 질문이 흥미 롭기 때문에 특정 질문에 직접 대답 할 수 없습니다.

한편, 뷰 - 모델에 매우 작은 뷰 특정 코드가 포함되어 있다는 논리는 재사용을위한 유익한 인수입니다. 반면에 뷰 모델은 뷰의 요구 사항을 명확하게 제공하고 다른 뷰의 요구 사항을 충족시킬 것으로 기대하면 문제가 될 수 있습니다.

결국 우리가 줄 수있는 것은 지침입니다. ifdefs 또는 ifs를 모 놀리 식 뷰 모델로 사용하고 싶지는 않습니다. 공통 기능을 기본 클래스로 리팩터링 할 수 있습니다. 객체 지향적 인 방법입니다.하지만 좋은 단위 테스트가 없으면 이미 작동중인 코드에서 무언가를 깨뜨릴 수 있습니다. 그러나 그렇게하지 않으면 싫증나 지 않는 잘라 내기 및 붙여 넣기 코드가 거의 같아 유지 관리의 악몽을 낳을 수 있습니다.

실용적인 접근법은 완전히 새로운 뷰 모델이 필요하지만 기존 뷰 모델을 코드로 검토하여 시작하기 전에 모델로 푸시 다운 할 수 있으므로 뷰 모델을 작게 만듭니다 가능한 한. 그런 다음 어떤 시점에서 프로토 타입을 작동시킨 후에 병합을 시도하여 실용적이고 문제가 발생하는지 확인할 수 있습니다. 문제가 해결되지 않으면 구현을 계속 진행하면서 문제를 고려한 다음 필요에 따라 두 가지 작업을 계획하십시오.

+0

그 말이 맞습니다 - 고마워요! – Goblin

+0

당신의 대답을 누가 싫어했는지 전혀 모르겠다. 나는 완벽한 감각을 가지고 있다고 생각한다. – Goblin

+0

@ 고블린 : "downvoting으로 운전"에 대해 할 수있는 일은 많지 않다. 프로젝트에 행운을 빈다. –

관련 문제