什么是 DTO 和 BO?有什么区别?
Posted
技术标签:
【中文标题】什么是 DTO 和 BO?有什么区别?【英文标题】:What is a DTO and BO? What is the difference? 【发布时间】:2011-06-05 22:42:20 【问题描述】:我知道 DTO 是一个数据传输对象,而 BO 是一个业务对象。但是,它实际上是什么意思?我什么时候应该选择一个而不是另一个? 从,我理解的DTO只是用来传输数据,没有业务逻辑。这是否意味着 DTO 没有任何方法属性(getter 和 setter)?但是,它仍然具有 BO 的属性。有人可以解释一下吗?谢谢。
【问题讨论】:
@Mitch Wheat:我已经告诉了我所知道的。我来 *** 不是因为我在互联网上找不到答案。我来这里是因为有专家非常了解这个话题,他们以简单明了的方式回答问题。你能告诉我(和其他人)你为什么问这个问题吗? @Sandbox :我问这个问题是因为当我在互联网上搜索这些术语时,我得到了正确的答案。 @Mitch Wheat:对于 SO 或相关堆栈交换站点上的大多数问题都是如此。你会在一些博客或论坛上找到答案。这是 SO 上第一次有人提出在互联网上无法搜索的问题? 我在 SO 上看到了这个,很少有高声望的成员。越来越喜欢羞辱和赶走低代表的成员。 @Sandbox :这个问题是真的。 【参考方案1】:DTO 用于在层/层之间传输数据。为此,它不需要任何方法,有时甚至不应该有任何方法——例如,当 DTO 通过 Web 服务公开时。
业务对象是一个聪明的对象,它包含对这个对象执行操作(更改数据)的数据和方法。当您将 BO 暴露给上层时,它可以调用您对象的公共方法。有时你不想要这个,因此你创建了只提供数据但不提供方法的 DTO。
DTO 不必传输所有 BO 数据。当您遵循严格的 DTO 方法时,您将为业务层上公开的每个操作创建特定的 DTO。例如,如果您的对象具有 CreatedBy、ModifiedBy、CreatedDate 等审计数据,并且您正在创建 Update 方法,那么您的传入 DTO(带有更新的对象)不需要具有这些属性,因为上层无法修改它们 - 只有业务逻辑可以.
【讨论】:
所以 DTO 总是用于从 BO 层到数据访问层的通信? No DTO 是可以在任何层之间使用的通用概念。 DTO 最常见的用法是在表示层和业务层之间。另一个常见的用法是在层之间(物理边界)。 我看到您了解 .net(根据您之前的答案)。那么,如果我在具有 3 层架构的 WPF 中使用 MVVM 模式,那么我的 VM 是 DTO 吗?还是只使用 VM 进行显示并使用 DTO 将数据从 VM 传输到 Model 并将 Model 传输到我的服务? 我从未使用过 WPF 或 MVVM,因此无法正确回答。但是当你使用 DTO 时,它必须在某个地方定义并在两层之间共享。如果 VM 具有某些 WPF 依赖项(例如 WPF 程序集的特殊属性或数据绑定的特殊属性实现),您是否希望在您的 DTO 中有这种依赖项? 纠正我,如果我错了。 Business Object 或 View Object 用于在 Presentation Layer 和 Business Layer 和 Entity Object 用于在业务层和数据访问层之间传输数据。并且 DTO 可以用作愚蠢的 BO。【参考方案2】:一般来说,DTO在到达层之前有相对的静态数据,但是BO可以动态保持状态和流标志值; BO也可以是自包含的,对某些业务逻辑进行验证或逻辑重组或判断;但是 DTO 的变化取决于 tier 传递过来的数据的变化...但是,BO 的变化范围更广,例如,取决于业务流状态的更动态更新, flag 的变化,甚至身份都可以实时更改,这些假设被捕获并从 BO 反映,例如,例如余额从 $200 变为零,或余额从 $2000 变为 $5000,那么交易/交易身份或状态将发生变化......这是DTO 和 BO 区别很大。
【讨论】:
以上是关于什么是 DTO 和 BO?有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章
Java中 PO VO BO DTO DAO 和 POJO 的概念及区别(图解)