Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller 根据MVC区分域、模型和实体_Model View Controller_Design Patterns_Model_Entity_Domain Object - Fatal编程技术网

Model view controller 根据MVC区分域、模型和实体

Model view controller 根据MVC区分域、模型和实体,model-view-controller,design-patterns,model,entity,domain-object,Model View Controller,Design Patterns,Model,Entity,Domain Object,有人能解释一下这三个概念,以及它们在MVC框架中的区别,并给出一个例子吗。对我来说,这些似乎几乎是等价的,而且似乎它们在某些文章中可以互换使用,而在其他文章中则不能互换使用 条款有点含糊,我同意。我会使用域来指代您正在处理的业务领域。比如银行或保险之类的。然后是域模型。这些是您在该业务领域中处理的事情,例如对于您拥有帐户、客户、转账等的银行业务领域。我将使用术语实体来引用类/POJO或模型的持久化/具体版本 这里可能让您感到困惑的是,在术语MVC中,模型是一个具体的东西,但它引用了用于在web

有人能解释一下这三个概念,以及它们在MVC框架中的区别,并给出一个例子吗。对我来说,这些似乎几乎是等价的,而且似乎它们在某些文章中可以互换使用,而在其他文章中则不能互换使用

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


这里可能让您感到困惑的是,在术语MVC中,模型是一个具体的东西,但它引用了用于在web GUI中表示某种表示的数据模型,因此不要与上述解释混淆。

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

在普通域对象中,没有存储逻辑。这件事由我来处理

术语“模型对象”来自Fowler的书(阅读以了解更多细节),并且,IMHO,是混淆MVC的一部分,因为整个模型是一个应用层(MVC由it和表示层组成),其中包含那些“模型对象”,这些“模型对象”通常由(在该图像中,模型层是所有三个同心圆的总和)

我更喜欢使用“域对象”这个术语

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

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


…不确定这是否会让您对记录更加困惑。实际上,域和模型是相同的,而实体也是一个域/对象,用于存储在数据库中

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

不同之处在于,在Java世界中,域被更多地使用,而在C#世界中,模型被使用(MS鼓励他使用),但这只是惯例,您可以同时使用两者


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

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