我有一个域对象图,我需要构建一个DTO来将其发送到视图。如何正确地设计它?我看到了两个选项,我可以将DTO构建代码放在哪里:
1)到DTO构造函数中。但是,域对象必须通过getter将所有字段呈现给DTO,所以它不是DDD。
public DTO(DomainObject domain) {
/// access internal fields of different domain object.
}2)进入域对象。访问字段不会有任何问题,但是当添加新视图时,域对象会增长得非常快。
public DTO1 createDTO1() {
...
}
public DTO2 createDTO1() {
...
}
// and so on...我应该如何正确地构建DTO?
发布于 2014-02-12 12:42:48
我认为这里有一个更大的问题在起作用。您不应该查询您的域。您的域应该专注于行为,因此,很可能不会以适合视图的格式包含数据,特别是为了显示目的。
如果您要将整个Customer对象发送回Edit,那么您将执行非常关注数据的基于实体的交互。您可能希望尝试将更多的注意力放在基于任务的交互上。
因此,为了将数据显示在视图中,我建议使用一个简单的查询层。通常,您将需要一些非规范化数据来提高查询性能,而这些数据无论如何都不会出现在您的域中。如果您确实需要do,那么直接从您的数据源映射它们。如果你能得到一个更通用的数据容器结构,那就是第一名。
发布于 2014-02-11 18:59:43
变体:
具有简单类型的DTO中的
发布于 2014-02-11 19:06:07
1) ...域对象必须通过getter将所有字段呈现给DTO ...
2) ...域对象会增长得非常快...
正如您所看到的,问题是这两种方案都将您的模型与DTO耦合在一起,因此您需要将它们解耦:在它们之间引入一个层,负责执行映射/转换。
您可能会发现this SO question很有用。
https://stackoverflow.com/questions/21698821
复制相似问题