Spring/Java项目层次结构:将无模型POJO类放在哪里?
我有一个查询一些外部API的Spring/Java项目层次结构:将无模型POJO类放在哪里?,java,spring,spring-boot,software-design,dto,Java,Spring,Spring Boot,Software Design,Dto,我有一个查询一些外部API的@Service类FooService。作为回报,它会得到一些FooResponse。此FooResponse用于创建模型对象,但它本身不是模型 该项目具有典型的Spring项目层次结构(即服务、模型、控制器、配置、UTIL) FooResponse应该驻留在哪里?它是一个dto 您会使用dto.foo.FooResponse.java?或者可能只是dto.FooResponse.java?如果您可以使用定义您的体系结构,那么您应该在域/应用程序层定义名为Foo的域模
@Service类FooService
。作为回报,它会得到一些FooResponse
。此FooResponse
用于创建模型对象,但它本身不是模型
该项目具有典型的Spring项目层次结构(即服务、模型、控制器、配置、UTIL)
FooResponse
应该驻留在哪里?它是一个dto
您会使用
dto.foo.FooResponse.java
?或者可能只是dto.FooResponse.java
?如果您可以使用定义您的体系结构,那么您应该在域/应用程序层定义名为Foo
的域模型,FooService应该返回Foo
域模型,并且FooResponse
可以封装在FooServiceImpl
com..infrastructure.service.impl
public class FooserviceImpl {
public Foo getFoo(T someParameter) {
// call external service
// getFooResponse
// Map FooResponse to Foo and return Foo
}
包结构
com..application.model.Foo
com..application.service.FooService
com..infrastructure.service.impl.FooServiceIml
接口服务
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,而不更改应用程序逻辑)这只是个人偏好的问题。没有客观的答案,只有意见。@Michael,那么你的意见是什么?不重要或不相关好吧,那么我有什么风格指南可以遵循吗?我个人建议不要使用“典型的层次结构”,而是建议按主题进行包装,例如com.example.bigapp.feature.external.foo.FooResponse
(以及FooService
、FooMapper
,以及其他任何内容)。