区分领域、模型和实体与 MVC 的关系

有人可以解释这3个概念和它们之间的区别就一个 MVC 框架连同一个例子。在我看来,它们几乎是等价的,而且似乎在某些文章中可以互换使用,而在其他文章中则不行。

62826 次浏览

条件有点含糊,我同意。我会使用 域名来指你正在处理的业务领域。比如银行或者保险什么的。然后是领域模型。这些都是你在那个业务领域处理的事情,比如银行的 域名,你有帐户,客户,转账等等。我将使用术语 实体来引用类/POJO 或模型的持久化/具体版本。

这里可能让您感到困惑的是,在术语 车祸中,模特是一个具体的东西,但它引用了用于在 web GUI 中表示某种表示的数据模型,所以不要将它与上面的解释混为一谈。

令您感到困惑的术语是: “ 域对象”、“域实体”和“模型对象”。虽然通常可以互换使用,但是域实体和模型对象也可以是 有效记录模式的实例(基本上是: 具有添加的存储逻辑的域对象)。

在普通域对象中没有存储逻辑,由 数据制图员处理。

术语“模型对象”来自 Fowler 的书(更多细节请阅读 PoEAA) ,恕我直言,它是 MVC 混淆的一部分,因为整个模型是一个应用层(MVC 由它和表示层组成) ,其中包含那些通常由 服务处理的“模型对象”(在该图像中,模型层是三个同心圆在一起)。

我更喜欢用“域对象”这个术语来代替。

术语“域实体”(或“实体对象”)通常用于当作者暗示该对象是一个存储结构的直接表示时(更常见的是——一个数据库表)。这些也几乎总是活动记录的实现。

附注: 在一些文章中,你也会看到术语“模型”(复数)。它通常与 MVC 设计模式没有直接关系,因为它讨论了类似 Rails 的体系结构,其中“模型”只是活动记录,直接暴露给/创建给控制器。

不知道这是不是让你更困惑了

郑重声明。在实际应用中,域和模型是相同的,而实体也是用于存储在数据库中的域/对象。

有些人试图重新解释这些话题,但没有一个是经典的。

不同之处在于,在 Java 世界中,使用的更多的是 Domain,而在 C # 世界中,使用的是 Model (MS 鼓励使用 Model) ,但它是公正的约定,您可以同时使用两者。

同样,价值对象(VO)也被 Java 用户使用,而 DTO 则被 C # 用户使用,即使两者实际上是相同的。还有 POJO (Java) vs POCO (C #) ,Packages (Java) vs NameSpace (C #) ,Setter and Getter (Java) vs Encapation (C #)

域和模型都是类。类的使用方式区分了它是否应该被分类并放在域或模型文件夹中。如果该类仅在视图中使用,则将其放在 model 文件夹中。如果该类映射到数据库对象,则将其放在域文件夹中。