我已经阅读了一些关于MVC的文章,但有一件事我不清楚。该模型在实际中的作用是什么。
模型是否代表业务对象? 或者它只是一个帮助从控制器向视图发送信息的类?
举例说明两个业务类(从数据库填充的数据)
Class Image
Property FileName As String
Property CreatedBy As User
End Class
Class User
Property UserName as String
End Class
“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
答案 0 :(得分:10)
对此有很多看法,但根据我的经验,Model
有两个主要观点:
这是一个POCO,它只包含显示View
所需的所有数据。数据通常由Controller
填充。
Model
完成了大部分业务工作。它包含并填充View
所需的所有数据,并由Controller
用于保存数据等。
MVC的魅力在于它是开放的!您可以选择所需的任何类型的模型...您可以将所有数据放入ViewState
,放入Model
,放入包含一堆ViewModel
的{{1}}无论如何。这完全取决于你。模型,视图和控制器是空白的画布,可以随意使用。
我的团队已经做了很多MVC工作,我们已经尝试了很多这些不同的方法。我们最终决定我们最喜欢的是 Fat Model,Skinny Controller 范例
我相信这种模式是“保持简单”和“不重复自己”的最佳模式,它肯定会保持“关注点分离”。
以下是我们的代码组织方式:
Model
,并将Model
提供给视图。不访问业务层或数据层。Model
Model
所需的所有数据的属性,并自行填充尽管这听起来像是MVC的一般原则,但很快就会发现MVC不需要这些原则,这就是许多项目使用其他原则的原因。
以下是View
的示例。 Controller创建它,它自己填充,Controller将它传递给View。
Model
在这种情况下,所有“用户业务逻辑”都在不同的项目(我们的“业务层”)中,因为我们有一个大型系统。但是较小的项目不需要这样......模型可以包含业务逻辑,甚至是数据访问代码。
答案 1 :(得分:1)
有很多型号。它既可以是业务数据(或域)对象(Controller - > Datasource,反之亦然),业务规则(对域对象起作用)或视图模型(Controller to View,反之亦然)。
您无需在ImageModel
中再次明确定义用户名。