the*_*tus 5 model-view-controller asp.net-mvc model
我读过一些关于MVC的文章,但有一件事我不清楚.该模型在实际中的作用是什么.
模型是否代表业务对象?或者它只是一个帮助从控制器向视图发送信息的类?
以两个业务类为例(从数据库填充的数据)
Class Image
Property FileName As String
Property CreatedBy As User
End Class
Class User
Property UserName as String
End Class
Run Code Online (Sandbox Code Playgroud)
将"Image"作为模型还是应该创建一个新类?
在模型中,我应该创建一个UserName属性来从User对象中获取它的数据吗?
Class ImageModel
Property FileName As String
Property CreatedBy As User
ReadOnly Property UserName As String
Get
Return User.UserName
End Get
End Property
End Class
Run Code Online (Sandbox Code Playgroud)
Sco*_*pey 10
对此有很多看法,但根据我的经验,有两个主要观点Model:
这是一个POCO,它只包含显示所需的所有数据View.数据通常由填充Controller.
在Model完成大部分的业务工作.它包含并填充了所需的所有数据View,并用于Controller保存数据等.
MVC的美妙之处在于它是开放的!你可以选择你想要的任何类型的模型......你可以把所有的数据到ViewState,成Model,成一个ViewModel包含了一堆ModelS,不管.这完全取决于你.模型,视图和控制器是空白的画布,可以随意使用.
我的团队已经做了很多MVC工作,我们已经尝试了很多这些不同的方法.我们最终决定我们最喜欢的是Fat Model,Skinny Controller范例.
我相信这种模式是"保持简单"和"不重复自己"的最佳模式,它绝对保持了"关注点分离".
以下是我们的代码组织方式:
Model,并给出Model视图.不访问业务层或数据层.ModelView,并填充自身虽然这听起来像是MVC的通用原则,但很快就会发现MVC不需要这些原则,这就是许多项目使用其他原则的原因.
这是一个例子Model.Controller创建它,它自己填充,Controller将它传递给View.
public class UsersModel
{
protected UserBusiness userBusiness = new UserBusiness();
public UsersModel(string editUserName)
{
// Load all users:
this.Users = userBusiness.GetAllUsers();
// Load the user to be edited:
this.EditUser = (editUserName == null) ? null : userBusiness.GetUser(editUserName);
}
public List<User> Users { get; private set;}
public User EditUser { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,所有"用户业务逻辑"都在一个不同的项目(我们的"业务层"),因为我们有一个大型系统.但是较小的项目不需要这样......模型可以包含业务逻辑,甚至是数据访问代码.
| 归档时间: |
|
| 查看次数: |
6774 次 |
| 最近记录: |