【问题标题】:Spring/Java project hierarchy: Where to put none model POJO classes? [closed]Spring/Java 项目层次结构:在哪里放置无模型 POJO 类? [关闭]
【发布时间】:2020-07-22 16:55:17
【问题描述】:

我有一个 @Service class FooService 查询一些外部 API。作为回报,它会得到一些FooResponse。这个FooResponse 被用来创建模型对象,但它本身并不是一个模型。

该项目具有典型的 Spring 项目层次结构(即服务、模型、控制器、配置、实用程序)

FooResponse 应该住在哪里?是dto吗?

你会选择dto.foo.FooResponse.java吗?或者只是dto.FooResponse.java?

【问题讨论】:

  • 这只是个人喜好问题。没有客观的答案,只有意见。
  • @Michael,那你的呢?
  • 不重要或不相关
  • 好的,有没有我可以遵循的风格指南?
  • 我个人建议不要使用“典型层次结构”,而是建议按主题打包,例如 com.example.bigapp.feature.external.foo.FooResponse(以及 FooService、FooMapper 和其他任何东西)。

标签: java spring spring-boot software-design dto


【解决方案1】:

如果你可以使用hexagonal architecture定义你的架构,那么你应该在域/应用层定义名为Foo的域模型,FooService应该返回Foo域模型,FooResponse可以封装在FooServiceImpl中

包结构

com..application.model.Foo
com..application.service.FooService
com..infrastructure.service.impl.FooServiceIml

接口 FooService

Foo getFoo(T someParameter)

班级FooServiceImpl

com..infrastructure.service.impl
public class FooserviceImpl {

public Foo getFoo(T someParameter) {
  // call external service
  // getFooResponse
  // Map FooResponse to Foo and return Foo
}

在六边形架构中,应用程序/域层不依赖于外层(表示、持久性、基础架构)。这种架构的好处是您可以在不影响业务逻辑的情况下更改基础架构代码(例如,FooServiceImpl 可以更改为使用 gRpc 而不是 REST,而无需更改应用程序逻辑)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 2011-06-11
    • 1970-01-01
    相关资源
    最近更新 更多