将DTO对象传递给服务层是不错的做法?
现在我的服务层方法如下所示:
public save(MyEntity entity);
将值从DTO映射到业务实体(MyEntity)在表示层
上完成但我想将方法签名更改为:
public save(MyEntityDTO dto, String author);
在从DTO到业务实体的映射将在服务层上发生。
编辑:我想要它,因为我需要在从DTO映射到业务对象时打开hibernate会话,因此实体上的所有更改都将自动刷新。
答案 0 :(得分:3)
将DTO对象传递给服务层是不错的做法?
您不仅可以将DTO对象传递给服务层,而且应该将DTO对象而不是业务实体传递给服务层。
您的服务应该接收DTO,将它们映射到业务实体并将它们发送到存储库。它还应该从存储库中检索业务实体,将它们映射到DTO并将DTO作为响应返回。因此,您的业务实体永远不会离开业务层,只有DTO会这样做。
查看类似问题here的完整答案。
答案 1 :(得分:0)
没关系,所有标准的3层架构都可以做到这一点。 Dataaccess获取数据,业务地图并操纵它,演示文稿呈现它。这是不行的 - 但是,正如所说的没有犯罪 - 将数据访问模型传递给演示 - 到目前为止,你应该通过商业模式。顺便说一句。 " DTO"可以表示任何事情,业务层模型可以是DTO,数据访问模型可以是DTO。 DTO通常是C#中的POCO。通常,您拥有数据访问模型,代表您的数据库实体和域模型,它们会传递应用程序周围的数据。域模型通常是DTO(或称之为POCO)。这意味着,在Microsoft演讲中,它们是完全可序列化的,因此您可以将它们传递给任何microsoft .net组件。您也可以将它们序列化为xml,json等......