java - Spring/Java项目层次结构: Where to put none model POJO classes?

标签 java spring spring-boot software-design dto

我有一个@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/

相关文章:

java - 如何在 spring 的 xmls 中定义变量以在 log4j.properties 中使用

java - Spring + ExtJS 文件上传所需的 MultipartFile 参数 'file' 不存在

其余 Controller 参数的 Spring 验证不起作用

cucumber-jvm - 任何让 Spring Boot 与 cucumber-jvm 一起工作?

spring - Spring Boot JAX-RS/CXF依赖项注入(inject)可在JAR中工作,但不能在WAR中工作

java - Spring @Entity注解findById

java - 编译器错误但程序执行正常

java - 使用 JSoup 仅删除 HTML 标签,而不删除 '<' 和 '>' 标签内的数据

Java - 将字符串(包括 EEST)转换为日期

oracle - 如何将Oracle配置为Spring引导应用程序