【发布时间】:2011-10-27 10:19:49
【问题描述】:
我是 ASP.NET MVC 3.0 的新手,正在尝试使用 MVC ViewModel 设计构建应用程序。
我想知道为 ViewModel 重新分级控制器的最佳做法是什么,并在下面有几个问题。这是我目前的理解(可能是错误的)..
- 我们创建模型。
- 通过创建一个新类并声明与基本模型类具有相同名称和类型的属性来创建 ViewModel(包括您以后要更新的基本模型的 ID 字段......并且这些类没有以任何方式链接)。
- 为每个基本模型创建一个存储库(以查找和保存数据等)。
- 为每个 ViewModel 创建一个 Controller 操作(访问基类的存储库以检索值并将这些值放入 ViewModel,然后将 ViewModel 传递给 ViewModel 视图)。
- 从 ViewModel 创建视图(ViewModel 视图)
- 在 ViewModel 控制器更新 (POST) 方法中接收更新的 ViewModel 对象并将其转换为基本模型对象(也许使用 Automapper?),然后使用它们的存储库将基本模型对象保存回来并像这样应用绑定? "TryUpdate(人)", "TryUpdate(地点);" (这看起来不对,目的是将值从 ViewModel 放回基类,应用绑定,使用存储库将基模型保存回来!.. 这似乎没有使用存储库.. 而不是 TryUpdate (person); 我希望看到类似这样的内容:person.Save(IPerson).. 其中“person 包含值”、“.Save 是存储库”和“IPerson 包含用于绑定的绑定属性”? ..不确定这是否正确..
到目前为止,我已经通过创建一个新类并使用相同名称添加来自不同基础模型的属性来创建 ViewModel。此时我有以下问题:
Q1:每个 ViewModel 是否都有自己的控制器并访问每个基本模型存储库类以获取其值?
Q2:考虑到您可能希望通过 ViewModels 控制器将更新发布回基本模型存储库(需要 ID值)?
Q3:你将如何使用接口绑定属性,以便使用存储库保存控制器中的模型。
我一直无法找到一个教程或资源来解释一步一步的例子,一个完整的答案是下面的例子:
- 2x 简单模型,1x 简单 viewModel,1x 用于绑定的接口,1x 使用接口类进行更新绑定的简单控制器,1x 存储库..即
//模型1
public class Person
{
int PersonID {get;set;}
string FirstName {get;set;}
string LastName {get;set;}
DateTime DOB {get;set}
}
//模型2
public class Place
{
int PlaceID {get;set;}
string Description {get;set;}
string AreaType {get;set;}
string PostCode {get;set;}
}
//ViewModel(包含模型的属性)
publc class ViewModel
{
//Person attributes
int PersonID {get;set;}
string FirstName {get;set;}
string LastName {get;set;}
//Place attributes
int PlaceID {get;set;}
string Description {get;set;}
string AreaType {get;set;}
//other attributes
string someOtherAttributeForDisplay {get;set}
}
//Model1接口(用于绑定模型)
public interface IPerson
{
string FirstName {get;set;}
}
//Model2接口(用于绑定模型)
public interface IPlace
{
string Description {get;set;}
string AreaType {get;set}
}
//ViewModelController?
{
//What goes here?
}
//存储库?
{
//what goes here?
}
【问题讨论】:
-
嗨 Mitch,我一直在研究使用 NuGet 将 Unity 和 EntLib 添加到我的项目中,但我不太确定它们的用途......
标签: asp.net asp.net-mvc asp.net-mvc-3 entity-framework c#-4.0