我有一个@Service class FooService
查询一些外部 API。作为返回,它得到一些FooResponse
。这个FooResponse
用于创建模型对象,但它本身并不是一个模型。
该项目具有典型的 Spring 项目层次结构(即服务、模型、 Controller 、配置、utils)
应该去哪里FooResponse
居住在?是 dto
?
你愿意选择dto.foo.FooResponse.java
吗? ?或者也许只是 dto.FooResponse.java
?
最佳答案
如果您可以使用 hexagonal architecture 定义您的架构那么你应该在域/应用层定义名为 Foo
的域模型,并且 FooService 应返回 Foo
域模型,并且 FooResponse
可以封装在 中FooServiceImpl
包结构
com..application.model.Foo
com..application.service.FooService
com..infrastructure.service.impl.FooServiceIml
接口(interface)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,而无需更改应用程序逻辑)
关于java - Spring/Java项目层次结构: Where to put none model POJO classes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63039395/