首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从域对象构建DTO的设计

从域对象构建DTO的设计
EN

Stack Overflow用户
提问于 2014-02-11 18:11:24
回答 4查看 1.3K关注 0票数 1

我有一个域对象图,我需要构建一个DTO来将其发送到视图。如何正确地设计它?我看到了两个选项,我可以将DTO构建代码放在哪里:

1)到DTO构造函数中。但是,域对象必须通过getter将所有字段呈现给DTO,所以它不是DDD。

代码语言:javascript
复制
public DTO(DomainObject domain) {
   /// access internal fields of different domain object.
}

2)进入域对象。访问字段不会有任何问题,但是当添加新视图时,域对象会增长得非常快。

代码语言:javascript
复制
public DTO1 createDTO1() {
    ...
}

public DTO2 createDTO1() {
    ...
}

// and so on...

我应该如何正确地构建DTO?

EN

回答 4

Stack Overflow用户

发布于 2014-02-12 12:42:48

我认为这里有一个更大的问题在起作用。您不应该查询您的域。您的域应该专注于行为,因此,很可能不会以适合视图的格式包含数据,特别是为了显示目的。

如果您要将整个Customer对象发送回Edit,那么您将执行非常关注数据的基于实体的交互。您可能希望尝试将更多的注意力放在基于任务的交互上。

因此,为了将数据显示在视图中,我建议使用一个简单的查询层。通常,您将需要一些非规范化数据来提高查询性能,而这些数据无论如何都不会出现在您的域中。如果您确实需要do,那么直接从您的数据源映射它们。如果你能得到一个更通用的数据容器结构,那就是第一名。

票数 3
EN

Stack Overflow用户

发布于 2014-02-11 18:59:43

变体:

具有简单类型的DTO中的

  1. 构造函数: public DTO(Long id,String title,int year,double Dozer类转换器,方法如下: DTO1 createDTO1(DomainObject域)用于将属性从一个对象复制到另一个对象的
  2. 框架,如Dozer: dozer.
票数 2
EN

Stack Overflow用户

发布于 2014-02-11 19:06:07

1) ...域对象必须通过getter将所有字段呈现给DTO ...

2) ...域对象会增长得非常快...

正如您所看到的,问题是这两种方案都将您的模型与DTO耦合在一起,因此您需要将它们解耦:在它们之间引入一个层,负责执行映射/转换。

您可能会发现this SO question很有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21698821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档