【发布时间】:2016-10-06 05:53:43
【问题描述】:
- 从业务对象创建 DTO 的正确方法是什么?
- 谁应该负责创建它们? BO/DTO 本身来自 BO/某个静态工厂?
- 如果我有,它们应该驻留在代码中的什么位置,例如我需要 DTO 的一些核心库和特定的服务 API 库?在 BO 旁边的核心库中(这似乎不正确)/在特定库中?
- 如果我在 BO 中封装了字段,DTO 如何获取它们? (显然是在 BO 不负责创建 DTO 的情况下)
作为一个例子,假设我有一些这样的人 BO:
class Person
{
private int age;
public bool isBigEnough => age > 10;
}
我希望 age 成为 Person 的内部状态,但我仍然需要将我的 BO 传达给一些 api。或者在我的班级中有我想发送到某处的私有字段已经意味着它应该是公共的?
- 对于如何将 DTO 与具有封装数据的业务类一起使用,是否有任何一般性考虑?
___ 更新:
除了@Alexey Groshev 提到的方法之外,我还遇到了另一种方法:我们将 BO 类的数据分离到一些具有公共访问器的 Data 类中。 BO 用它的 api(可能使用组合)包装这些数据,并且在需要时它可以将其状态作为 Data 类作为克隆返回。所以 dto 转换器将能够访问域对象的状态,但不能修改它(因为它只是一个副本)。
【问题讨论】:
标签: oop design-patterns dto