栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring Entries应该在服务中转换为Dto吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Entries应该在服务中转换为Dto吗?

有一千种方法来做某事,并且对什么是最好的方法也有很多看法。但是没有最好的方法,一切都有优点和缺点。请记住这一点!

通常,你具有不同的层:

  • 持久层存储数据
  • 业务层来处理数据
  • 表示层公开数据

通常,每个层都将使用其自己的对象类型:

  • 持久层:存储库,实体
  • 业务层:服务,域对象
  • 表示层:控制器,DTO

这意味着每一层只能使用其自己的对象,而永远不会将它们传递给另一层。

为什么?因为你希望每个层都与其他层分开。如果要在控制器中使用实体,则演示将取决于数据的存储方式。真的很糟糕 你的视图与数据的存储方式无关。它甚至不知道该如何存储数据。

考虑一下:更改数据库模型,例如,向一个数据库表中添加一个新列。如果将实体传递给控制器​​(或更糟糕的是:控制器将其公开为JSON),则数据库中的更改将导致演示文稿发生更改。如果将实体直接公开为JSON,这甚至可能导致Javascript或其他使用JSON的客户端发生更改。因此,对数据库进行简单的更改可能需要更改Javascript前端,因为你将各层紧密耦合在一起。你绝对不希望在实际项目中那样。

怎么样?你怀疑这是否可行,因此仅是一个简单的示例(使用伪代码):

class Repository {    public Person loadById(Long id) {        PersonEntity entity = loadEntityById(id);        Person person = new Person();        person.setId(entity.getId());        person.setName(entity.getFirstName + " " + entity.getLastName());        return person;    }}

在此示例中,你的存储库将在内部使用实体。没有其他层知道或使用此实体!它们是此特定层的实现细节。因此,如果要求存储库返回“人员”,则该存储库将在实体上工作,但它将返回域对象。因此,在需要更改实体的情况下,可以保存与存储库一起使用的域层。如你所见,在名称的情况下,域和数据库可能会有所不同。虽然数据库以名字和姓氏存储名称,但是域仅知道一个名称。这是持久性如何存储名称的详细信息。

控制器和DTO(仅另一层)也是如此。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/404970.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号