服务层返回对象类型

时间:2017-05-10 09:21:04

标签: java spring-boot dao

您知道,对于API项目,有许多模式可以检索并向客户端提供数据。 Controller <-> Service <-> Dao模式是其中一种模式。

从服务层或服务层返回任何类型的对象返回对象必须是相关实体吗?

例如,我们有UserUserServiceUserDao。 UserService返回类型应该是User还是适合任何类型的对象?

在服务层中进行逻辑操作迫使我使用其他对象作为返回类型。

该案例的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

广泛接受的做法涉及服务中包含所有业务逻辑,并在您的案例中返回像User这样的数据传输对象(DTO)/业务对象。服务可以调用DAO,任何其他数据源来获取实体,mapper / converter util可以用于将实体转换为DTO对象。

从Service返回的DTO对象可以嵌入到ResponseEntity中(在Spring MVC的情况下)并从控制器返回。

这使您的应用程序分为三个独立的层,如Web,service,dataaccess。这支持设计原则,如分离关注,单一责任。这也使您的单元测试和代码管理更容易。

答案 1 :(得分:1)

我发现我需要3种对象来保持事物的可管理性(我仍在努力提出一个不错的命名策略)。有时有好处:

  1. 从数据层返回的对象-这些对象将由您的数据实现决定。例如,如果您决定以其他方式存储数据,则它们可能会更改。也许您决定序列化一个对象并将其存储为JSON,而不是将其存储在单独的表中,或者您从SQL转到NOSQL。
  2. 从您的域层返回的对象-这些是应用程序对象,应为您的域建模。它们不应包含特定于您的数据实现的内容。
  3. 与您的API收发的对象-使用单独的序列化对象来对API进行整形很有用。这意味着您可以调整API,而无需接触业务逻辑。在某些项目中,我有针对v1,v2等的多个版本的API对象。