在MVC中,1个模型1表或1个模型表几个?

时间:2009-06-21 09:07:08

标签: model-view-controller

在MVC中,1个模型1表或1个模型表几个?

我正在构建一个包含3个表的应用程序。我不知道是否应该为所有3个表创建一个模型或为3个表创建3个模型。

如果我为3个表使用3个模型,如果我想加入这3个表,我应该把代码放在哪里?将代码放在3个模型中的任何一个中?

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

通常,MVC的“模型”部分应该被解释为“表示模型”或“视图模型” - 即封装View所需的所有数据和行为的类。这可能与域模型等效也可能不相同。

域模型应设计为独立于UI。这意味着不应该使用特定于UI的数据和行为来污染此类模型 - 例如确定是否启用了特定按钮。

您可能还想在几个不同的视图中显示相同的域对象(例如,主/明细或显示/编辑),如果这些视图有足够的不同,为每个视图设置一个视图模型将是有益的。

因此,通常,您应该独立设计域层和表示层。

在域层中,您可以选择将三个表建模为三个类。像Fowler的Patterns of Enterprise Application Architecture和Evans的Domain-Driven Design这样的书包含了很多关于如何将关系数据建模为域模型的指导。

在MVC中对视图进行建模时,最有必要为每个视图创建一个模型。这样的视图模型可能只是封装了一个域对象,但它也可以封装和聚合几个不同的域对象。

通过这种方式,您可以确保关注点分离,并确保您的课程遵循单一责任原则。

对于非常简单的场景,将域模型和表示模型折叠成一个层可能是有意义的,但是您应该意识到这实际上意味着解决方案中没有域模型 - 所有模型都是纯粹的表示模型。

答案 1 :(得分:4)

通常你会为每个表创建一个模型,所以在你的情况下它意味着你需要3个模型。 当我说“模型”时,我指的是一个代表单个表(通常)在一个表中的类。

例如: 表:

  1. 产品
  2. 订单
  3. 客户
  4. 在这种情况下,最简单和最简单的方法是创建3个不同的类(代表应用程序的数据模型),其中第一个类表示单个产品,下一个表示订单,最后一个类表示单个客户。