我必须编写一堆DTO(数据传输对象) - 它们的唯一目的是在客户端应用程序和服务器应用程序之间传输数据,因此它们具有一堆属性,序列化函数和反序列化函数
当我看到DTO时,他们经常会有吸气剂和制定者,但他们对这些类型的课程有什么意义吗?我确实想知道我是否曾经在方法中进行验证或进行计算,但我认为可能并不是因为这似乎超出了他们的目的范围。
在服务器端,业务层处理逻辑,在客户端中,DTO将仅用于视图模型(并将数据发送到服务器)。
假设我正确地做了所有这些,人们会怎么想?
谢谢!
编辑:如果是这样,将get / set实现放在类定义中会有什么问题吗?保存重复cpp文件中的所有内容......
答案 0 :(得分:4)
如果你有一个明确的目的只是将它的成员变量存储在一个地方的类,你也可以将它们全部公开。
答案 1 :(得分:0)
该对象可能不需要析构函数(如果需要清理资源,只需要一个析构函数,例如指针,但如果你要序列化一个指针,那么你只是要求麻烦)。有一些语法糖构造函数可能很好,但没有什么是必要的。
如果数据只是用于传输数据的普通旧数据(POD)对象,则它是结构(完全公共类)的候选者。
但是,根据您的设计,您可能需要考虑添加一些行为,例如一个.action()方法,它知道如何将它携带的数据集成到您的实际Model对象中;而不是让实际模型本身整合这些变化。实际上,DTO可以被视为Controller(输入)的一部分,而不是Model(数据)的一部分。
在任何情况下,在任何语言中,getter / setter都是封装不良的标志。为每个实例字段设置一个getter / setter并不是OOP。 Objects should be Rich, not Anemic。如果你真的想要一个贫血对象,那么跳过getter / setter并直接进入POD全公共结构;使用getter / setter而不是完全公共结构几乎没有任何好处,除了它使代码复杂化,因此如果您的工作区使用代码行作为生产力指标,它可能会给您更高的评级。