15

我对 DCO 含义的搜索毫无结果,所以我决定在这里问。在我的 Java 应用程序中,有很多类,如 EmployeeDetailsDto、EmployeeDetailsDao,但最近我也遇到了 EmployeeDetailsDco。有谁知道DCO代表什么?

4

7 回答 7

27

DTO =数据传输对象

DAO =数据访问对象

DCO = 动态可配置对象

文章

动态可配置对象 (DCO)

一个对象,其实现在运行后可以增量更改

  • 由界面元素组成
  • 公共职能
  • 私有函数
  • 私有数据以及所有访问函数
  • 成员函数支持对界面元素的增量更改
  • 添加、删除或更改
于 2009-04-17T09:34:06.727 回答
5

我刚刚和那个曾经记得这代表什么的人交谈过。具有讽刺意味的是,他不再这样做了。这家公司的任何其他人也没有。

我能找到的解释是,它基本上是一个 DTO,但他们想使用 DCO 来区分 Hibernate 使用的 DTO 和外部系统使用的 DCO,在本例中是 LDAP。

所以我相信,正如 Bhushan 所暗示的那样,DCO 的含义实际上可能是 Data Carrying object 或类似的东西,在这种情况下,它确实只是 DTO 的另一个名称。回答接受。谢谢你的时间!我以为 DCO 是开发人员广泛使用的公认首字母缩略词,但事实证明就是这样……抱歉。

编辑


对于那些感兴趣的人来说,答案是数据容器对象。我在公司引起了足够的轰动,所以最终一位同事通过电子邮件向 DCO 术语的本地发起者发送了电子邮件,如果有人仍然想知道,它代表Data Container Object

于 2009-04-20T15:44:12.413 回答
2

我只能说数据携带对象不是DCO的意思,将“数据携带对象”放在谷歌中,它不会返回任何命中。

因此,条款必须是错误的。

好的,尝试谷歌搜索“数据对象 DCO”

并得到了这个结果,这表明 DCO 的意思是“数据更改对象”

我的猜测是 DCO 是一个保存对象数据更改的对象,即“差异”。

于 2009-04-17T09:56:50.510 回答
1

重构 Dto 并删除 DTO 后缀。

您可能希望将 Dao 更改为 Store 或类似的东西。

首先,最后没有 Dto/dco 的 EmployeeSetails 显然是一个持有与员工相关的值的值类。如果没有另一个术语,很明显它不是一个实用程序——它应该被称为诸如 EmployeeDetailsUtil/Helper 之类的东西。

您的 dao 应该被称为 EmployeeSetailsS​​tore,因为它描述了它的功能,即 EmployeeSetsils 的存储。将它们放置在何处或放置在何处无关紧要,它们隐藏在您的代码中。如果你真的想要,如果它使用 Hibernate,你可以称它为 HibernateEmploteeDetaileStore 等。您的接口应称为 EmployeeSetailsS​​tore。实现者或此接口将使用接口名称作为开始并将 impl 技术添加到该基本名称。

最后但并非最不重要的一点是,这里的 String 是一个 char 数组的值,但在这种情况下添加 Dto 是丑陋而愚蠢的。

只能使用像 Url 这样众所周知的首字母缩略词。最后,商店永远不会令人困惑,而您提到的所有首字母缩略词并没有使事情变得更清楚,并且在这种情况下引入了 co fusion 和这个涂层时间。

如果您使用我建议的内容来衡量打字,那么您实际上输入的字符更少,一切都会更清晰。毕竟我们都是快速打字员,所以总是以清晰而不是简洁为目标,所以还有一些额外的字符。最后,我们花更多的时间阅读、理解等而不是打字,所以在类名中添加一些额外的字符根本不会降低生产力......

不要吝啬……从一开始就做好。

于 2009-04-17T09:37:09.263 回答
0

我从未听说过 DCO,但它是否只是 DTO 的另一个名称?

于 2009-04-17T09:25:01.633 回答
0

这可能是命令对象。

于 2009-04-17T09:39:08.087 回答
0

我使用 DCO 作为数据转换对象。

例如,您有:

  1. 用于dto.User通过网络传输用户(例如,使用 Jackson 注释并映射到 JSON 接口)和:
  2. 用于dao.User将用户存储在数据库中(例如,使用 JPA 注释并映射到具有来自 JSON 传输对象的不同字段和格式的遗留数据库)

您需要在两者之间进行转换。

与其在不属于它们的 DTO 或 DAO 中编写该转换逻辑,不如将它们放在 DCO 中。

所以你有dco.User

package com.mycompany.myapp.dco;

// converts between data access objects (DAOs) and data transfer objects (DTOs).
public class User {
    com.mycompany.myapp.dao.User toDao(com.mycompany.myapp.dto.User) {
        // dto to dao conversion.
    }

    // could call this method fromDao if that is preferred.
    com.mycompany.myapp.dto.User toDto(com.mycompany.myapp.dao.User) {
        // dao to dto conversion.
    }
}   

然后,您可以轻松实现和测试转换,并在整个服务层需要它们的任何地方调用它们。

当您需要在模型和视图模型之间进行转换时,这种模式的另一种用法可能是在 UI 的模型视图视图模型 MVVM架构中。在这种情况下,视图模型与视图绑定,并且可以由用户在 UI 中直接操作进行更改,但模型保持独立,例如当您想要加载或保存更改到磁盘时。在这种情况下,提供数据转换对象(我称之为 DCO)可以帮助在相似事物的两种不同表示之间来回转换。

注意,在这种理解下,DCO 实际上只是一组函数,而不是一个有状态的对象。因此,您可以将其称为 DataConvertor,或者您可以将所有转换函数放在一个工厂类中,用于您需要转换的所有对象的整个域层(如果您愿意)。

这只是我有时会做的事情,不一定是标准。其他人可能会使用 DCO 来代表其他东西。

于 2020-08-27T00:16:34.413 回答