我可以在ASP.NET MVC3应用程序中使用我的大部分代码吗?

时间:2011-09-28 14:23:57

标签: c# asp.net-mvc-3 mvvm viewmodel

我写了一个简单的WPF应用程序作为例子:

型号:

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 个答案:

答案 0 :(得分:2)

不,不是真的。 ViewModels和Controllers受完全不同的设计模式的约束。

MVVM和MVC的亮点在于它们有助于从代码隐藏中突破业务逻辑。您很可能可以共享您的支持代码(您从VM和控制器调用的代码,但任何以平台为中心的设计都没有涉及的代码)和模型(取决于它们的编码方式)。

我目前正在开发一个结合了MVC网站和WPF应用程序的应用程序,我确实在它们之间共享模型,以及我可以从我的VM和控制器中挤出的代码。但是两者之间存在太大的不同,将VM用作控制器,反之亦然。

答案 1 :(得分:0)

你的'firstname'和'lastname'方法只会移动到模型中,因为它们不仅仅是稍微更加花哨的getter和setter。

你是FullName方法我很想放入控制器,因为它正在处理格式化,但它确实有一种基本的,可测试的逻辑。

正如你所说的,我不确定你是否可以使用NotifyProperty gubbins,但一般来说这些方法应该很快就可以了。