DTO的Hibernate,Frontend Objects vs Backend Objects

时间:2015-11-09 08:05:04

标签: java hibernate jpa design-patterns

我从Hibernate 4开始,在一个使用AngularJS的Web项目中,我怀疑一个典型的情况,当你想在你的GUI中使用你的Entity Java Classes(Hibernate)时,我需要一个案例再添加两个字段:输入要在前端显示的名称和用户名,但此字段位于我的模型中的另一个表中,对象模板只有id(ManytoOne)。

这里的问题是,在这种情况下最好的做法是什么,创建一个DTO或在你的班级中添加这个新字段,但没有与数据库映射?

3 个答案:

答案 0 :(得分:1)

我更喜欢使用DTO&#39>:

  • 数据库层(您的存储库或DAO')只获取并返回模型实体。
  • 服务层获取并仅返回DTO

因此服务层负责将DTO映射到实体,反之亦然。

这将视图与数据库模型分离,并在将数据从服务器发送到客户端时提供更大的灵活性。

将DTO映射到实体会产生大量代码,但最终它会得到回报。您可以使用OrikaDozer等库来帮助您解决问题。

答案 1 :(得分:0)

我可能会建议使用DTO。通过将字段添加到对象模型,可以将模型与前端表示绑定,并且两者都可以单独增长和更改。

目前,您只有一个显示此实体的视图,但它可以更改,如果您使用3个不同的实体视图,则必须向实体添加3种不同的方式来表示它们对象

某些视图可能需要很少的信息,而其他视图可能需要更多信息。如果所有这些视图都使用相同的对象,则无论需要如何都将传递所有信息。

我建议将业务模型与其表示形式联系起来。

答案 2 :(得分:0)

在我看来,我相信你从程序的客户端隐藏你的域模型(比如你的实体对象)会更好。通常,您最好只从存储库访问您的域,即使您的服务无法直接访问您的域模型对象。 (在MVC范例中)。所以最后我认为你在服务器上制作DTO并将其发送到客户端更好