2017-09-26 108 views
2

我知道将实体类和属性复制到DTO中被认为是反模式,因此通过Exposed domain model模式可以将相同的@Entity同时用作数据库实体类和服务和MVC的DTO层。 (参见这里https://codereview.stackexchange.com/questions/93511/data-transfer-objects-vs-entities-in-java-rest-server-application在Java微服务体系结构中公开的域模型

但是假设我们有微服务体系结构,其中一个项目中的同一组属性用作持久性的项目中的实体,而另一个项目中的DTO使用第一个项目作为服务。在这种情况下建议的模式是什么? 由于第二个项目不需要@Entity相关功能,并且如果我们将该类放入共享库中,它将不必要地绑定到JPA特定的API和库。另一种方法是再次使用单独的DTO类反模式。

回答

0

有时设计模式可能是反模式。我回顾了很多关于这个话题的文章,我仍然不能决定“单独的DTO类反模式”是否真的是反模式。因为根据你的第二个项目的答案,暴露域模型看起来像反模式。有些人说,由于某种原因分离Dto和实体。有人说这取决于你的项目。还行吧。这取决于我们的项目。但我们无法预测我们的项目。也许暴露的领域模型对于我们现在的项目来说是最好的选择,但是将来也许不是。

因此,我通常使用Spring框架,我更喜欢使用JdbcTemplete。使用JdbcTemplate,您可以使用RowMapper映射模型类。所以我可以使用这个模型类作为DTO和实体,而不必与JPA绑定。这样你就必须编写更多的低级代码,但它提供了更多的灵活性。