【发布时间】:2009-08-24 18:17:27
【问题描述】:
我不确定这个问题是否无意义,如果是,请告诉我。我想知道我是创建我的模型,比如数据库中的每个表一个,还是每个控制器一个?我在这里有什么遗漏吗?
从我读到的模型假设是真实业务对象的表示,所以我只想将它变成一个大模型还是根据应用程序中的内容将它们分开?基于真实的用户/客户对数据的感知?
感谢您的建议。
【问题讨论】:
标签: asp.net-mvc model controller
我不确定这个问题是否无意义,如果是,请告诉我。我想知道我是创建我的模型,比如数据库中的每个表一个,还是每个控制器一个?我在这里有什么遗漏吗?
从我读到的模型假设是真实业务对象的表示,所以我只想将它变成一个大模型还是根据应用程序中的内容将它们分开?基于真实的用户/客户对数据的感知?
感谢您的建议。
【问题讨论】:
标签: asp.net-mvc model controller
控制器共享模型并没有错。但是试图用相同的模型为每个控制器提供服务是没有意义的。
模型和控制器确实不相关,也不应该相关。模型也与数据在应用程序中的存储方式没有直接关系。
模型封装数据。它们的设计应该由它们封装的数据决定。系统的需求决定了您需要哪些模型以及它们必须保存哪些数据。
不要想太多。对于给定的请求,确定您需要在视图中显示的内容以及显示方式。确定适合该场景的模型是什么样的。如果已经存在,请使用它。如果没有,请创建一个新模型。当您知道自己的需求是什么并且可以找到模型之间的共性时,可以避免过度设计。
模型还可以包含其他模型,这很好。想想销售报告的模型。您将拥有一个报表模型,其中不仅包含报表名称、总计,还包含构成报表行项目的其他模型的集合。
【讨论】:
这取决于您所说的“模型”是什么意思。如果模型是指应用程序的业务规则层,那么就数字而言没有关系。该类型的一个模型可用于您需要构建的任意数量的视图。
然而,就我个人而言,我不会将任何视图绑定到任何模型,而是创建一个称为 ViewModel 的中间层,它本质上是对模型中的数据进行定制以适应特定视图。在这种情况下,这种关系是一对一的。这基本上就是 Presenter 模式的工作方式。每个视图都对其自己的 ViewModel 进行强类型化,该 ViewModel 是从 Model 层填充的。
模型也不一定与数据库有文字上的对应关系。模型存储数据的方式与“模型”使用数据的方式不同。
【讨论】: