SuperAPI AI 工具集

spring-modulith-verifier

编程与开发

查看项目

更新于 10-16 02:25

技能介绍

Spring Modulith Verifier 是一个用于验证代码是否遵循 Spring Modulith 代码结构的技能。它采用领域驱动、模块化的布局方式,要求按业务模块组织包,而不是按技术分层组织。

用途

该技能用于检查代码是否符合 Spring Modulith 的模块化结构,并列出违规项以及如何修复的建议。

推荐的包结构

技能给出了一个推荐的示例包结构,以 dev.sivalabs.projectname 为根:

  • Application:主 Spring Boot 入口类,带有 @SpringBootApplication 注解,包含启动应用的 main() 方法。
  • shared/:包含跨模块共享的横切关注点和工具(如通用工具、共享 DTO、基类、自定义注解)。
  • {module}/(例如 users/、catalog/、orders/):每个业务模块代表一个有界上下文,包含:
    • config/:模块特定的配置类,带有 @Configuration 注解,用于该模块相关的 bean、属性或第三方集成。
    • domain/:核心业务逻辑层,包含:
      • models/:领域模型类(Command、Query 对象、枚举、值对象、Result 对象等),代表业务概念(不是 JPA 实体),是封装业务规则的纯 Java 对象。
      • exceptions/:领域特定的自定义异常类。
      • entities:带有 @Entity 注解的 JPA 实体类,映射到数据库表。这些不应是 public,以防止直接实例化并确保封装。
      • repositories:继承 JpaRepository 或 CrudRepository 的 Spring Data JPA 仓库接口,用于数据访问。这些不应是 public。
      • mappers:用于在实体、领域模型和 DTO 之间转换的映射器类/接口(例如 MapStruct 映射器)。这些不应是 public。
      • services:带有 @Service 注解的服务类,包含业务逻辑、使用映射器转换 bean、事务管理以及编排仓库调用。
    • api/:REST API 层,包含:
      • controllers:带有 @RestController 注解的 REST 控制器类,处理 HTTP 请求、验证输入并委托给服务。
      • DTOs:数据传输对象,包括请求负载(来自客户端的数据)和响应负载(发送给客户端的数据)。
    • {Module}API.java:作为模块公共 API 的门面类,将调用委托给服务,只暴露其他模块应访问的内容,同时隐藏内部实现细节。
  • config/:全局应用级配置类,包括:
    • WebMvcConfig.java:MVC 配置(CORS、拦截器、格式化器)。
    • SecurityConfig.java:用于认证和授权的 Spring Security 配置。
    • GlobalExceptionHandler.java:使用 @RestControllerAdvice 进行集中异常处理,以提供一致的错误响应。

可见性修饰符

默认使用最小必要可见性,只暴露其他模块或层真正需要的内容。技能给出了各组件在类、构造器、方法上的可见性约定:

  • Controller:类 package-private,构造器 package-private,方法 package-private。
  • Service:类 public,构造器 package-private,方法 public。
  • Repository:接口 package-private。
  • Entity:类 package-private,构造器 protected,方法 public。
  • DTO / record:public 或 package-private。
  • Module API facade:类 public,构造器 package-private,方法 public。
  • Request/Response records:package-private。
  • Config/Exception handler:package-private。

命名约定

技能规定了以下命名约定:

  • 实体:*Entity,例如 UserEntity、AddressEntity。
  • 值对象:领域名称(record),例如 Email、UserCode、UserId。
  • 命令:*Cmd,例如 CreateUserCmd、UpdateAddressCmd。
  • 命令响应:*Result,例如 LoginResult、RegistrationResult。
  • DTO:*Dto,例如 UserDto、AddressDto。
  • HTTP 请求:*Request,例如 CreateUserRequest、CreateAddressRequest。
  • HTTP 响应:*Response,例如 CreateUserResponse、CreateAddressResponse。
  • 仓库:*Repository,例如 UserRepository、AddressBookRepository。
  • 服务:*Service,例如 UserService、AddressBookService。
  • 领域异常:*Exception,例如 InvalidUserCreationException、UserCancellationException。
  • 模块 API:*API,例如 UsersAPI。

使用方式

资料中未提供具体的使用方式或安装命令。

适用场景

适用于使用 Spring Modulith 构建模块化单体应用的开发场景,帮助团队保持一致的代码组织方式,并检查代码是否符合推荐的模块化结构。

限制

资料中未提供关于限制的明确说明。