我对DCO意义的探索是徒劳的,所以我决定在这里问一下。在我的Java应用程序中,有许多类,如EmployeeDetailsDto,EmployeeDetailsDao,但最近我也遇到了EmployeeDetailsDco。有谁知道DCO代表什么?
答案 0 :(得分:21)
DTO = Data Transfer Object
DAO = Data Access Object
来自article
一个对象,其实现可以在运行后逐步改变
答案 1 :(得分:4)
我刚跟那个曾经记得这个代表的人说过话。他不再那么具有讽刺意味。这家公司的其他人也没有。
我能找到的解释是,它基本上是一个DTO,但他们想用DCO来区分Hibernate使用的DTO和外部系统使用的DCO,在这种情况下是LDAP。
所以我相信DCO的意义确实可以像Bhushan所建议的那样,数据携带对象等,在这种情况下,它确实只是DTO的另一个名称。接受了答案。谢谢你的时间!我认为DCO是开发人员广泛使用的一个公认的首字母缩略词,但事实证明这只是...抱歉。
修改强>
答案是数据容器对象,对于那些感兴趣的人。我在公司引起了足够的轰动,所以最终一位同事通过电子邮件向DCO术语的本地发起人发送电子邮件,如果有人仍在关注,那么它代表数据容器对象。
答案 2 :(得分:1)
重构Dtos并删除DTO后缀。
您可能想要将Dao更改为Store或类似的东西。
首先,没有Dto / dco的EmployeeSetails显然是一个值类,其中包含与员工相关的值。没有另一个术语,很明显它不是一个实用程序 - 应该被称为像EmployeeDetailsUtil / Helper等。
你的dao应该被称为EmployeeSetailsStore,因为它描述了它的功能是EmployeeSetsils的存储。放置它们的方式和位置无关紧要,它们隐藏在您的代码中。如果你真的想要你可以把它称为HibernateEmploteeDetaileStore等,如果它使用Hibernate。您的界面应该称为EmployeeSetailsStore。实现者或此接口将使用接口名称作为开始,并将impl技术添加到该基本名称。
最后但并非最不重要的是String这里是一个char数组的值,但在这种情况下添加Dto是丑陋和愚蠢的。
只应该使用像Url这样真正众所周知的首字母缩略词。最后,商店永远不会让人感到困惑,而你提到的所有首字母缩略词都没有让事情更清晰,在这种情况下引入了共融合和涂层时间。
如果你使用我建议的方式测量打字,你实际输入的字符越少,一切都越清晰。在我们都是快速打字机之后,总是瞄准清晰而不是简洁,所以还有一些额外的角色。最后我们花了更多的时间阅读,理解等而不是打字,所以一个类名中的一些额外的字符不会降低生产力......
不要吝啬......从一开始就做好。
答案 3 :(得分:1)
我只能说数据承载对象不是DCO的意思,在谷歌中放置“数据承载对象”并且它不会返回任何命中。
因此这些术语必须是错误的。
好的,试过google搜索“Data Objects DCO”
得到了这个result,这表明DCO意味着“数据变更对象”
我的猜测是DCO是一个对象,它保存对象数据的变化,即“差异”。
答案 4 :(得分:0)
我从来没有听说过DCO,但是数据携带对象只是DTO的另一个名字吗?
答案 5 :(得分:0)
这可能是命令对象。
答案 6 :(得分:0)
我将DCO用作数据转换对象。
例如,您有:
dto.User
,用于通过网络传输用户(例如,用Jackson注释并映射到JSON接口)和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代表其他东西。