区分域,模型和实体与MVC

Mar*_*cny 48 model-view-controller entity design-patterns model domain-object

有人可以解释这3个概念以及它们之间在MVC框架方面的差异以及一个例子.对我来说,这些似乎几乎相同,似乎它们在某些文章中可互换使用,而在其他文章中则不然.

ter*_*ško 31

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

在普通的域对象中,没有存储逻辑.它由数据映射器处理.

术语"模型对象"来自福勒的书(读POEAA有详细介绍),并且,恕我直言,是混乱的MVC,因为整个模型是一个应用层(MVC由它和表现层)的一部分,其中包含那些"模型对象",通常由服务处理(在该图像中,模型层是所有三个同心圆).

我更喜欢使用"域对象"术语.

当作者暗示对象是存储结构的直接表示(更常见的是 - 数据库表)时,通常使用术语"域实体"(或"实体对象").这些也几乎总是实现活动记录.

PS:在某些文章中,您还会看到术语"模型"(复数).它通常与MVC设计模式没有直接关系,因为它讨论的是类似Rails的体系结构,其中"模型"只是活动记录,直接由控制器公开/创建.

..不确定这是否让你更加困惑


ver*_*tti 28

我同意这些条款有点模糊.我会使用来指代您正在处理的业务领域.像银行或保险或什么不是.然后你有域模型.这些是您在该业务领域中处理的事情,例如您拥有帐户,客户,转移等的银行领域.我将使用术语实体来引用类/ POJO或模型的持久/具体版本.

你在这里可能会感到困惑的是,在MVC这个术语中,模型是一个具体的东西,但是它引用了用于在Web GUI中表示某些表示的数据模型,所以不要将其与上述说明混合在一起.


mag*_*nes 8

作为记录。实际上,域和模型是相同的,而实体也是用于存储在数据库中的域/对象。

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

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

在相同的概念中,Java 人员使用值对象 (VO),而 C# 人员使用 DTO,即使两者几乎相同。还有 POJO (Java) 与 POCO (C#)、包 (Java) 与命名空间 (C#)、Setter 和 Getter (Java) 与封装 (C#)


小智 7

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