【问题标题】:Differentiating between domain, model, and entity with respect to MVC关于 MVC 的领域、模型和实体之间的区别
【发布时间】:2013-03-10 12:39:18
【问题描述】:

谁能解释这 3 个概念以及它们在 MVC 框架方面的区别以及示例。对我来说,这些看起来几乎是等价的,而且似乎它们在某些文章中可以互换使用,而在其他文章中则没有。

【问题讨论】:

    标签: model-view-controller design-patterns model entity domain-object


    【解决方案1】:

    我同意这些条款有点模糊。我会使用 domain 来指代您正在处理的业务领域。比如银行或保险之类的。然后你有域模型。这些是您在该业务域中处理的事情,例如对于银行的,您拥有帐户、客户、转账等。我会使用术语 entity 来引用类/ POJO 或模型的持久化/具体版本。

    这里可能让你感到困惑的是,在术语 MVC 中,model 是一个具体的东西,但它引用了用于表示 Web 中的某些呈现的数据模型GUI 所以不要把它和上面的解释混在一起。

    【讨论】:

      【解决方案2】:

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

      在普通域对象中没有存储逻辑。它由data mappers处理。

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

      我更喜欢使用“域对象”一词。

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

      P.S.:在某些文章中,您还会看到术语“模型”(复数)。它通常与 MVC 设计模式没有直接关系,因为它讨论的是类似 Rails 的架构,其中“模型”只是活动记录,直接暴露给控制器/由控制器创建。

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

      【讨论】:

        【解决方案3】:

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

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

        不同之处在于,在 Java 的世界中,Domain 被更多地使用,而在 C# 的世界中,Model 被使用(MS 鼓励他使用)但它只是惯例,你可以同时使用。

        同样的概念,Java 的人使用值对象 (VO),而 C# 的人使用 DTO,即使两者实际上是相同的。还有 POJO (Java) vs POCO (C#)、Packages (Java) vs NameSpace (C#)、Setter and Getter (Java) vs Encapsulation (C#)

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-03-03
            • 2014-11-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-28
            • 2020-09-17
            • 2014-01-23
            相关资源
            最近更新 更多