2011-09-28 34 views
0

我寫了一個簡單的WPF應用程序爲例:我可以在ASP.NET MVC3應用程序中使用我的大部分代碼嗎?

型號:

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

視圖模型:

//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); } 
    } 
} 

我可以重用我在MVC3應用程序代碼?我認爲INotifyPropertyChanged的東西不起作用,但是我仍然不能重複使用ViewModel?

回答

2

不,不是真的。 ViewModels和控制器由完全不同的設計模式管理。

MVVM和MVC的亮點在於,它們可以幫助您從代碼隱藏中突破業務邏輯。您很可能可以共享您的支持代碼(您從VM和控制器調用的代碼,但不受任何以平臺爲中心的設計)以及模型(取決於它們的編碼方式)。

我目前正在研究一個結合了MVC網站和WPF應用程序的應用程序,並且我在它們之間共享模型,以及儘可能多地從我的VM和控制器中擠出代碼。但是,將這些虛擬機用作控制器的情況與這兩者之間的差別太大了,反之亦然。

+0

你能舉一個例子來說明會導致休息的原因嗎? – michael

+0

@michael:控制器裝飾了許多MVC特有的屬性。這要求您定位整個框架。可以創建一個MVVM應用程序來定位客戶端框架。祕訣是你將這個「冗餘代碼」擠出到一個單獨的程序集中,並從你的VM和控制器中引用它。而且,編寫一個可用於兩者的單一課程將不會讓您的生活在未來更輕鬆。即使你不考慮線程,你也會遇到維護問題(***你應該***)。 – Will

0

你的'名字'和'姓氏'方法只會進入模型,因爲它們並不比稍多一點的花招吸氣者和設定者多。

你是FullName方法我試圖將它放在控制器中,因爲它處理格式化,但它確實有一個基本的和可測試的邏輯。如你所說,我不確定你可以使用NotifyProperty gubbins,但一般的方法應該愉快地移植。

+0

我想我應該澄清這一點......但我不會擺脫「包裝」屬性的原因是消除重複代碼的需要。基本上我試圖能夠使用我的ViewModel而不需要將其重命名爲UserController並且看起來類似。 – michael

相關問題