打包结构化 Spring 项目的最佳实践是啥?

Posted

技术标签:

【中文标题】打包结构化 Spring 项目的最佳实践是啥?【英文标题】:what is best practice to package structuring Spring project?打包结构化 Spring 项目的最佳实践是什么? 【发布时间】:2019-11-15 17:49:08 【问题描述】:

我有 Spring Cloud 项目,每个微服务我认为我有很多包。我也有包含实体和自定义请求响应对象的模型包。

问题1:实体类包名必须是什么?实体还是模型?

问题2:Searchrequest & Searchresponse 等请求响应类必须保存在哪里?在模型包中还是我必须创建其他包?

问题 3:退出一些包结构标准? (请给我链接)

【问题讨论】:

【参考方案1】:

没有具体的标准结构,会根据你的需要而变化。

    实体类应该在域包下,而不是 附加类名。它可以像 Book.class, School.class 等, 搜索请求和响应是请求和响应类,它 应该在控制器包下。这些都是服务端 分。 查看link

大部分 SERVICE 包将包含所有具有业务逻辑并与 DAO 类连接的服务类,Controller 将包含所有其余端点,Model 包将包含 pojo 类。

【讨论】:

一些补充:请求和响应对象应该放在有效负载文件夹中。 是的,正确的、修改后的有效负载将包含在有效负载包中。谢谢@zlaval【参考方案2】:

    数据库表的包名应该是实体。

    Here is why?

    对于第二季度和第三季度Packaging Structure

希望这有帮助,让我知道:)

【讨论】:

【参考方案3】:

没有严格的规定。您必须使用一个自解释的命名(不需要深入研究类内容来理解其含义)。 这适用于微服务、Web 应用程序、批处理和任何类型的应用程序。

我想我有很多包

包的主要作用是以人类可读的方式对事物进行排序。 例如,如果您按包有 2 或 3 个类,您可能想知道它们的相关性。 同样,如果您在一个包中有 50 个类,您也会想知道是否应该将它们拆分为子包。 请注意,包在可访问性方面也有作用:确实,package private 访问级别允许设置/减少类或类成员对当前包的类的可访问性。它在设计和隔离方面也可能非常有用。

关于你的三个问题:

问题1:实体类包名必须是什么?实体或 型号?

在 Java 中,entity 通常指的是 JPA 实体(总体上在 Spring 项目中)。 虽然model 指的是一个更一般的概念,包括entity,但不仅因为数据模型还可以是DTO 对象和模型的任何数据特化。 如果您使用单个数据对象层(也用作 JSON 表示的 JPA 实体),则使用 model 术语完全有意义。如果您使用多个抽象级别,则按抽象级别进行封装更有意义。

问题2:Searchrequest & Searchresponse等必须保存在哪里 请求响应类?在模型包中,否则我必须创建其他 包?

如果这些对象通过每一层:在model,否则可能在其他地方。

问题 3:退出一些包结构标准? (请给 我的链接)

3) 并非如此,但根据经验,它应该是不言自明的、非常清晰的并且由项目团队共享,以促进项目之间的一致性。

【讨论】:

【参考方案4】:

创建包是免费的,所以不用担心创建很多包。创建包的目的是组织您的代码并划分一些职责或上下文。

问题1:实体类包名必须是什么?实体还是模型?

您需要在这两者之间understand the difference,然后才能选择更好的名称:

模型对象表示 MVC(模型视图控制器)中的数据 图案。一个实体对象表示 ORM 中的数据(Object 关系映射)模式。它们可能是同一个对象。或者不。

因此,您可以将实体用作模型类,即使我认为这是一种不好的做法。如果是你的情况,也许你更喜欢使用 model 作为包名。如果没有,entity 是正确的选择。

问题2:Searchrequest & Searchresponse 等请求响应类必须保存在哪里?在模型包中还是我必须创建其他包?

这些类与控制器包非常相关。因此,您可以创建这两个包并将请求和响应放在那里,每个包都放在他的包中:

controller.response
controller.request

问题 3:退出一些包结构标准? (请给我链接)

看到这个答案:Are there best practices for (Java) package organization?

【讨论】:

以上是关于打包结构化 Spring 项目的最佳实践是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 中 JWT 的最佳实践是啥?

spring boot 并行传出请求的最佳实践是啥?

ehcache 或 Spring MVC 的 Spring 缓存中的最佳缓存实践是啥?

在rest apis(spring)中响应个性化对象的最佳实践是啥[关闭]

为多个数据库关系配置 Hibernate-Spring 的最佳实践是啥?

Firestore 数据结构的最佳实践是啥?