2011-09-28 2 views
0

나는 예를 들어 간단한 WPF 응용 프로그램을 작성 :ASP.NET MVC3 앱에서 대부분의 코드를 사용할 수 있습니까?

모델 :

public class User 
{ 
    public String FirstName { get; set; } 
    public String LastName { get; set; } 
} 

의 ViewModel : 내가 MVC3 응용 프로그램에서 내 코드

//ViewModelBase contains base code for INotifyPropertyChanged 
public class UserViewModel : ViewModelBase 
{ 
    public UserViewModel(User user) 
    { 
     _user = user ?? new User(); 
    } 

    private User _user; 

    public String FirstName 
    { 
     get { return _user.FirstName; } 
     set 
     { 
      if (_user.FirstName != value) 
      { 
       _user.FirstName = value; 
       RaisePropertyChanged("FirstName", "Full Name"); 
      } 
     } 
    } 

    public String LastName 
    { 
     get { return _user.LastName; } 
     set 
     { 
      if (_user.LastName!= value) 
      { 
       _user.LastName= value; 
       RaisePropertyChanged("LastName", "Full Name"); 
      } 
     } 
    } 

    public String FullName 
    { 
     get { return String.Format("{0}, {1}", LastName, FirstName); } 
    } 
} 

다시 사용할 수 있습니까? 나는 INotifyPropertyChanged가 작동하지 않을 것이라고 생각하지만 여전히 ViewModel을 어떻게 든 재사용 할 수는 없습니까?

답변

2

아니요. ViewModels 및 Controller는 에 의해 완전히 달라진 디자인 패턴의 영향을받습니다.

여기서 MVVM과 MVC는 코드 숨김에서 비즈니스 로직을 깨는 데 도움이되는 것입니다. 지원 코드 (VM 및 컨트롤러에서 호출했지만 플랫폼 중심 디자인에서 다루지 않은 코드)와 모델 (코딩 방법에 따라 다름)을 공유 할 수 있습니다.

저는 현재 MVC 웹 사이트와 WPF 응용 프로그램을 결합한 응용 프로그램에서 작업하고 있으며 그 사이에서 모델을 공유하고 VM 및 컨트롤러에서 압축 할 수있는 많은 코드를 제공합니다. 그러나 VM을 컨트롤러로 사용하는 경우와 VM을 VM로 사용하는 경우가 너무 많이 다릅니다.

+0

휴식을 유발할 수있는 사례를 제시 할 수 있습니까 (중복 된 코드 일뿐입니다). – michael

+0

@michael : 컨트롤러는 여러 MVC 관련 속성으로 꾸며져 있습니다. 이를 위해서는 전체 프레임 워크를 대상으로해야합니다. 클라이언트 프레임 워크를 대상으로 MVVM 응용 프로그램을 만들 수 있습니다. 비밀은 "중복 코드"를 별도의 어셈블리로 짜내서 VM과 컨트롤러에서 참조하는 것입니다. 또한, 둘 다 사용할 수있는 단일 클래스를 작성하는 것이 미래의 삶을 편하게 만들지는 못합니다. 스레딩을 고려하지 않더라도 유지 관리 문제가 발생할 것입니다 (***해야합니다 ***). – Will

0

당신의 'firstname'과 'lastname'방법은 약간 더 멋진 getters와 setters보다 훨씬 더 많은 것이 아니기 때문에 모델로 옮겨 갈 것입니다.

당신은 FullName 메서드입니다. 포맷팅을 처리 할 때 컨트롤러에 넣으려는 유혹에 빠졌지 만, 기본적이고 테스트 가능한 로직을 가지고 있습니다.

당신이 말했듯이, NotifyProperty gubbins를 사용할 수 있을지 확신하지는 않지만 일반적으로 메소드는 쉽게 전달되어야합니다.

+0

나는 이것을 분명히해야한다고 생각한다. 그러나 "wrapper"속성을 제거하지 못한 이유는 중복 된 코드를 가질 필요가 없기 때문이다. 기본적으로 나는 그것의 이름을 UserController로 바꿀 필요없이 내 ViewModel을 사용할 수있게하려고 노력하고있다. – michael

관련 문제