【问题标题】:DTO, DAO, and DCO. What is a DCO?DTO、DAO 和 DCO。什么是 DCO?
【发布时间】:2010-10-20 01:41:59
【问题描述】:

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

【问题讨论】:

  • EmployeeDetailsDco 对象与 Dto 对象有何不同?
  • 嗯,没有 EmployeeDetailsDto。我说有这样的课程。事实上确实有一个类似的类:EmployeeAccountDto 扩展了 BaseLdapDto,这个看起来很像 EmployeeDetailsDco 扩展 BaseLdapDco。 DCO是什么??代码看起来非常相似。似乎它也在做同样的事情。我认为这是一些标准使用的首字母缩写词。
  • 会不会只是拼写错误?
  • 这些 Dco 有不少。所以可能不是。我一直在寻找最初编写代码的人,所以我可以对此给出明确的答案。谁知道,也许有人已经正确回答了。我希望这是一个任何人都可以定义的广泛使用的首字母缩略词......

标签: java terminology acronym


【解决方案1】:

DTO = Data Transfer Object

DAO = Data Access Object

DCO = Dynamically Configurable Object?

来自article

动态可配置对象 (DCO)

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

  • 由界面元素组成
  • 公共功能
  • 私有函数
  • 私有数据以及所有访问函数
  • 成员函数支持对界面元素进行增量更改
  • 添加、删除或更改

【讨论】:

    【解决方案2】:

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

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

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

    编辑


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

    【讨论】:

    • Java 的疯狂。所有对象都应该包含数据(以及对数据进行操作的行为)!
    • 嗯,大多数,不是所有的(像枚举这样的标记对象只有身份,没有数据,无状态对象只有行为),但我想重点是这些对象几乎没有其他作用。在过去,它们被称为“结构”...... :)
    【解决方案3】:

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

    因此条款肯定是错误的。

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

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

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

    【讨论】:

      【解决方案4】:

      重构 Dto 并删除 DTO 后缀。

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

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

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

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

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

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

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

      【讨论】:

      • 这看起来很激进。你为什么会推荐这个?
      【解决方案5】:

      我从未听说过 DCO,但它是数据承载对象只是 DTO 的另一个名称吗?

      【讨论】:

      • 嗯,它看起来就像一个 DTO...所以你可能是对的。数据承载对象?这是你的猜测还是你真的在某个地方找到了这个?
      • 我想到了 DCO 中的 C 必须是什么,我想到了携带词。
      【解决方案6】:

      这可能是命令对象。

      【讨论】:

        【解决方案7】:

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

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

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

        【讨论】:

          猜你喜欢
          • 2016-05-06
          • 2022-01-21
          • 2012-12-06
          • 2016-06-17
          • 2011-06-05
          • 2010-11-15
          • 2012-12-31
          • 1970-01-01
          • 2012-03-18
          相关资源
          最近更新 更多