我写了一个简单的WPF应用程序作为示例:
模型:
public class User
{
public String FirstName { get; set; }
public String LastName { get; set; }
}
ViewModel:
//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); }
}
}
我可以在mvc应用程序中重用我的代码吗?我认为INotifyPropertyChanged的东西不会工作,但我还不能重用ViewModel某种程度上?
没有。视图模型和控制器由完全不同的设计模式管理。
MVVM和MVC的亮点在于它们帮助你从代码背后分离出业务逻辑。你很可能可以共享你的支持代码(你从你的vm和controller调用的代码,但它不会被任何以平台为中心的设计所触及)和模型(取决于它们是如何编码的)。
我目前正在开发一个应用程序,它结合了MVC网站和WPF应用程序,我在它们之间共享模型,以及尽可能多的代码,我可以从我的vm和控制器中挤出来。但是两者之间有太多的不同,不能将vm用作控制器,反之亦然。
您的'firstname'和'lastname'方法将直接移动到模型中,因为它们只是稍微更花哨的getter和setter。
你的FullName方法,我想把它放在控制器中,因为它处理格式化,但它背后确实有一个基本的,可测试的逻辑。
正如您所说,我不确定您是否可以使用NotifyProperty子类,但这些方法通常应该愉快地移植过来。