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

Bil*_*lly 5 model-view-controller

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

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

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

有什么建议?

Mar*_*ann 6

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

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

您可能还希望在几个不同的视图中显示相同的域对象(例如,主/细节,或显示/编辑),如果这些视图充分不同,则为每个视图设置视图模型将是有益的.

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

在域层中,您可以选择将三个表建模为三个类.像Fowler的企业应用程序架构模式和Evans的域驱动设计这样的书籍包含了很多关于如何将关系数据建模为域模型的指导.

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

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

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


yos*_*g81 4

通常您会为每个表创建一个模型,因此在您的情况下这意味着您需要 3 个模型。当我说“模型”时,我的意思是一个代表单个表中(通常)单行的类。

例如: 表:

  1. 产品
  2. 命令
  3. 顾客

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

  • 如果我想加入这3个表,我应该把代码放在哪里? (5认同)