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中表示某些表示的数据模型,所以不要将其与上述说明混合在一起.
作为记录。实际上,域和模型是相同的,而实体也是用于存储在数据库中的域/对象。
有些人试图重新解释这些话题,但没有一个是经典。
不同之处在于,在 Java 世界中,Domain 使用得更多,而在 C# 世界中,使用 Model(MS 鼓励使用他)但它只是约定,您可以同时使用两者。
在相同的概念中,Java 人员使用值对象 (VO),而 C# 人员使用 DTO,即使两者几乎相同。还有 POJO (Java) 与 POCO (C#)、包 (Java) 与命名空间 (C#)、Setter 和 Getter (Java) 与封装 (C#)