diff --git a/mis-spec/SKILL.md b/mis-spec/SKILL.md index dc4b42c..6bd3c6d 100644 --- a/mis-spec/SKILL.md +++ b/mis-spec/SKILL.md @@ -5,7 +5,7 @@ description: 在mis编写代码的必备技能。 # mis-spec -请结合[核心技术栈](./references/core_arch.md),并严格遵守[代码编写规范](./references/coding_rules.md)生成代码,被要求编写HTTP接口文档时,请参考[api-doc.md](./examples//api-doc.md)文档生成。 +请结合[核心技术栈](./references/core_arch.md)、[MVC通用目录结构](./references/mvc_dir.md),并严格遵守[代码编写规范](./references/coding_rules.md)生成代码,被要求编写HTTP接口文档时,请参考[api-doc.md](./examples//api-doc.md)文档生成。 ## 示例代码 diff --git a/mis-spec/references/mvc_dir.md b/mis-spec/references/mvc_dir.md new file mode 100644 index 0000000..e690146 --- /dev/null +++ b/mis-spec/references/mvc_dir.md @@ -0,0 +1,120 @@ +# 目录结构说明 + +一个标准的MVC三层目录结构示例: + +```text +com/example/project/ +│ +├── controller/ # 控制器层(接收请求) +│ ├── UserController.java +│ ├── ProductController.java +│ └── ... +│ +├── service/ # 业务逻辑层 +│ ├── UserService.java # 接口 +│ ├── impl/ # 实现类 +│ │ └── UserServiceImpl.java +│ └── ... +│ +├── mapper/ # 数据访问层(MyBatis Mapper) +│ ├── UserMapper.java +│ ├── ProductMapper.java +│ └── ... +│ +├── domain/ # 领域层(聚合所有数据对象) +│ ├── entity/ # 实体类(与数据库表对应) +│ │ ├── User.java +│ │ ├── Product.java +│ │ └── ... +│ │ +│ ├── dto/ # 数据传输对象(输入参数) +│ │ ├── UserLoginDTO.java +│ │ ├── UserRegisterDTO.java +│ │ ├── ProductQueryDTO.java +│ │ └── ... +│ │ +│ └── vo/ # 视图对象(输出结果) +│ ├── UserVO.java +│ ├── ProductVO.java +│ ├── PageVO.java # 分页结果封装 +│ └── ... +│ +├── config/ # 配置类 +│ ├── WebConfig.java +│ ├── DataSourceConfig.java +│ ├── SecurityConfig.java +│ └── ... +│ +├── exception/ # 异常处理 +│ ├── GlobalExceptionHandler.java +│ ├── BusinessException.java +│ └── ... +│ +├── interceptor/ # 拦截器 +│ ├── LoginInterceptor.java +│ ├── LogInterceptor.java +│ └── ... +│ +├── aspect/ # AOP切面(可选) +│ ├── LogAspect.java +│ └── ... +│ +├── util/ # 工具类 +│ ├── JwtUtil.java +│ ├── DateUtil.java +│ └── ... +│ +├── constant/ # 常量类 +│ ├── StatusCode.java +│ └── ... +│ +├── enums/ # 枚举类 +│ ├── UserRoleEnum.java +│ ├── ResultCodeEnum.java +│ └── ... +│ +└── Application.java # 启动类 +``` + +## 各层职责说明 + +## 📋 Spring MVC 各层职责说明 + +| 包名 | 职责 | 关键注解 | 典型类名示例 | +|------|------|----------|-------------| +| **controller** | 接收HTTP请求,参数校验,调用Service层,返回VO给前端 | `@RestController`
`@RequestMapping`
`@Validated` | `UserController.java`
`ProductController.java` | +| **service** | 业务逻辑处理,事务管理,调用Mapper层,组装数据 | `@Service`
`@Transactional` | `UserService.java`(接口)
`UserServiceImpl.java`(实现) | +| **mapper** | 数据库CRUD操作,SQL映射,与数据库交互 | `@Mapper`
`@Repository`
`@Select`/`@Insert`等 | `UserMapper.java`
`ProductMapper.java` | +| **domain/entity** | 数据库表映射实体,与表结构一一对应 | `@TableName`(MyBatis-Plus)
`@Entity`(JPA)
`@Id`
`@Column` | `User.java`
`Product.java`
`Order.java` | +| **domain/dto** | 接口输入参数对象,用于接收前端请求数据,可添加校验注解 | `@Data`
`@NotBlank`/`@NotNull`等校验注解 | `UserLoginDTO.java`
`UserRegisterDTO.java`
`ProductQueryDTO.java` | +| **domain/vo** | 接口输出结果对象,用于返回前端展示数据,过滤敏感字段 | `@Data`
无业务注解 | `UserVO.java`
`ProductVO.java`
`PageVO.java` | +| **config** | 配置类,用于配置数据源、拦截器、跨域、Swagger等 | `@Configuration`
`@Bean`
`@EnableWebMvc` | `WebConfig.java`
`DataSourceConfig.java`
`SecurityConfig.java`
`SwaggerConfig.java` | +| **exception** | 全局异常处理,自定义业务异常类 | `@ControllerAdvice`
`@ExceptionHandler`
`@ResponseBody` | `GlobalExceptionHandler.java`
`BusinessException.java`
`ParamException.java` | +| **interceptor** | 请求拦截器,用于登录验证、权限检查、日志记录、性能监控 | `@Component`
实现 `HandlerInterceptor` | `LoginInterceptor.java`
`LogInterceptor.java`
`AuthInterceptor.java` | +| **aspect** | AOP切面,用于日志记录、权限控制、性能统计、缓存处理 | `@Aspect`
`@Around`
`@Before`
`@After` | `LogAspect.java`
`PermissionAspect.java`
`TimeAspect.java` | +| **util** | 通用工具类,提供各种辅助方法 | 无注解 | `JwtUtil.java`
`DateUtil.java`
`PasswordUtil.java`
`FileUtil.java` | +| **constant** | 常量定义,统一管理常量值 | 无注解 | `StatusCode.java`
`RedisKey.java`
`Constant.java` | +| **enums** | 枚举类型定义,管理固定状态码、类型等 | `@Enum` | `UserRoleEnum.java`
`ResultCodeEnum.java`
`OrderStatusEnum.java` | +| **Application** | 项目启动类,Spring Boot应用入口 | `@SpringBootApplication`
`@MapperScan` | `Application.java` | + +## 各层调用关系图 + +```mermaid +flowchart LR + subgraph 调用链 + Controller -->|依赖调用| Service + Service -->|依赖调用| Mapper + Mapper -->|依赖调用| Database + end + + subgraph 数据对象 + DTO[DTO
输入参数] + VO[VO
输出结果] + Entity[Entity
实体对象] + end + + Controller -.->|接收| DTO + Controller -.->|返回| VO + Service -.->|转换| Entity + Mapper -.->|操作| Entity +``` \ No newline at end of file