Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring/Java项目层次结构:将无模型POJO类放在哪里?_Java_Spring_Spring Boot_Software Design_Dto - Fatal编程技术网

Spring/Java项目层次结构:将无模型POJO类放在哪里?

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的域模

我有一个查询一些外部API的
@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
,以及其他任何内容)。