MVC模型对象,域对象和DTO之间有什么区别?
MVC模型对象,域对象和DTO有什么区别?
我的理解是:
MVC模型对象:
通过相应的视图对要显示的数据进行build模。 这样可能不会直接映射到域对象,即可能包含来自一个或多个域对象的数据。
- 客户端
- 可能包含业务逻辑,如validation,计算属性等
- 没有持久性相关的方法
域对象:
用于模拟问题域中的现实世界对象(如Reservation,Customer,ORder等)的对象用于保留数据。
- 服务器端
- 没有业务逻辑
DTO(数据传输对象):
用于在图层位于不同的进程中(例如从数据库到客户端应用程序)之间传输数据的对象。 允许通过电话进行单个事务而不是多次呼叫。 一个DTO只包含数据和存取方法,没有逻辑。 数据是针对特定的数据库事务处理的,因此不能直接访问域对象,即可能包含来自一个或多个域对象的数据。
- 在层之间传递时用于两侧
- 没有业务逻辑
- 没有持久性相关的方法
所以对于这些问题:
(1)我的理解是否正确? 我错过了一些关键点?
(2)假设Model对象不需要额外的业务逻辑,是否有任何理由不使用Domain对象作为MVC模型?
(3)假设Model对象不需要额外的业务逻辑,是否有任何理由不使用DTO作为MVC模型?
谢谢。
蒂姆
域和模型对象本质上是相同的,可能包含业务逻辑。 取决于实现,如果将业务逻辑从模型中移除到服务类中,那么域和DTO对象可能是等价的。
通常,DTO的一个关键变体是视图模型,它纯粹用于在域模型和视图之间传输数据,虽然通常视图模型可能包含逻辑,尽pipe这应该是纯粹的UI逻辑。
域和DTO也可以是您的“模型”对象 – 您可以有一个视图来呈现“客户”域对象的细节。
域对象可以有业务逻辑来强制域实体的属性。 validation就是这样一个例子。 域对象本身不包含与持久相关的方法,但它可以有元数据(如注释)来支持持久性
POJO编程模型使得可以使用与你的域,DTO和模型对象相同的对象 – 本质上,你将不会实现任何多余的接口,它只适用于一个层,但不适用于其他层。
A DTO = is an object that carries data between processes.
但最有趣的部分是,它除了存储和检索自己的数据外没有任何行为!
坚持MVC的方法…
Domain = subject of your entire application. Model = contains the (programming languages objects : EX: C# objects) to make up the universe of your application.
他们可以明显地有行为和属性(与DTO有所不同)。
通常,一个应用程序(一个轻量级应用程序)可以有一个模型 – 您的模型恰好就是您的领域。 另一个模型可以是一个完全不同的对象types,它正在处理另一个对象types。 在这种情况下,它们都是你的域的一部分,并被命名为“域模型 – 对象”。
希望这个答案是详尽无遗的,让你清楚!
1)不,这是ViewModel的定义。 MVC模型对象和域对象都是相同的。
2)领域模型(对象)总是存在的,业务逻辑是可选的
3)如果Domain Object中没有业务逻辑,则自动变为DTO。