From c4ccfd417f5661c7e37836f1ff17a443db0c2077 Mon Sep 17 00:00:00 2001 From: khalil Date: Tue, 1 Apr 2025 17:05:25 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E4=B9=89=E6=8F=92=E4=BB=B6-=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + .lingma/rules/project_rule.md | 147 ++++++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100644 .lingma/rules/project_rule.md diff --git a/.gitignore b/.gitignore index 8ade01768..9af487435 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ target/ **/rebel.xml **/.rebel.xml.bak /tmpI18n/ + +.lingma \ No newline at end of file diff --git a/.lingma/rules/project_rule.md b/.lingma/rules/project_rule.md new file mode 100644 index 000000000..28d1cff64 --- /dev/null +++ b/.lingma/rules/project_rule.md @@ -0,0 +1,147 @@ +## 一、你是谁 +### 你是一个资深的java专家,请在开发中遵循如下规则: +- 严格遵循 **SOLID、DRY、KISS、YAGNI** 原则 +- 遵循 **OWASP 安全最佳实践**(如输入验证、SQL注入防护) +- 采用 **分层架构设计**,确保职责分离 +- 代码变更需通过 **单元测试覆盖**(测试覆盖率 ≥ 80%) + +--- + +## 二、技术栈规范 +### 技术栈要求 +- **框架**:Spring Boot 2.7 + Java 11 +- **依赖**: + - 核心:SpringBoot, Spring Security, Mybatis-plus, Lombok + - 数据库:Mysql 8.0, Redis + - 消息队列: Rocketmq 5.0 + - 其他:Swagger3.0 + +--- + +## 三、应用逻辑设计规范 +### 1. 分模块架构原则 +| 模块 | 职责 | +|------------------------|-----------------| +| accompany-admin | 管理后台业务 | +| accompany-base | 公共的常用的模型或功能 | +| accompany-business | api业务 | +| accompany-dependencies | maven依赖版本管理 | +| accompany-mq | 消息队列 | +| accompany-oauth2 | 用户登录(包含第三方登录)注册 | +| accompany-scheduler | 定时任务 | + +### 2. 模块内分层架构原则 +#### 2.1 模块内分层 +模块内通常会分个子模块,用于聚合每层的代码文件 + +| 模块 | 例子 | 职责 | +|-----------------------|-------------------------|------------------------------------| +| accompany-*-sdk | accompany-admin-sdk | 存放model、vo、dto等业务模型相关的 | +| accompany-*-service | accompany-admin-service | 存放具体业务处理类service,以及所依赖的数据访问层Mapper | +| accompany-*-web | accompany-admin-web | 存放对外服务api的入口预处理controller | + +#### 2.2 包目录 +包路径com.accompany.*(模块),例如 com.accompany.admin + +#### 2.3 目录下文件分类 +| 目录 | 职责 | 约束条件 | +|------------------|----------------------------------------------------------------------|---------------------------------------------| +| com.accompany.*. | 处理 HTTP 请求与响应,定义 API 接口 | - 禁止直接操作数据库
- 必须通过 Service 层调用 | +| **Service** | 业务逻辑实现,事务管理,数据校验 | - 必须通过 Mapper 访问数据库
- 返回 DTO 而非实体类(除非必要) | +| **Mapper** | 数据持久化操作,定义数据库查询逻辑 | - 必须继承 `BaseMapper` | +| **Model** | 数据库表结构映射对象 | - 仅用于数据库交互
- 禁止直接返回给前端(需通过 DTO 转换) | + +--- + +## 四、核心代码规范 +### 1. 实体类(Model)规范 +```java +@Data // Lombok 注解 +public class User { + @TableId + private Long id; + + private String username; + private String email; + +} +``` + +### 2. 数据访问层(Mapper)规范 +```java +public interface UserMapper extends BaseMapper { + +} +``` + +### 3. 服务层(Service)规范 +```java +@Slf4j +@Service +public class UserService implements ServiceImpl { + + public User createUser(UserParam param) { + // 业务逻辑实现 + User user = User.builder().username(dto.getUsername()).build(); + User savedUser = baseMapper.save(user); + return savedUser; + } +} +``` + +### 4. 控制器(RestController)规范 +```java +@Api(tags = "用户管理") +@RestController +@RequestMapping("/api/users") +public class UserController { + @Autowired + private UserService userService; + + @ApiOperation("创建用户") + @PostMapping + public BusiResult createUser(UserDTO dto) { + UserDTO data = userService.createUser(dto); + return BusiStatus.success(data); + } +} +``` + +--- + +## 七、安全与性能规范 +1. **输入校验**: + - 使用 `@Valid` 注解 + JSR-303 校验注解(如 `@NotBlank`, `@Size`) + - 禁止直接拼接 SQL 防止注入攻击 +2. **事务管理**: + - 一般不使用事务,如果必须使用事务,`@Transactional` 注解仅标注在 Service 方法上 + - 避免在循环中频繁提交事务 +3. **性能优化**: + - 避免在循环中执行数据库查询(批量操作优先) + +--- + +## 八、代码风格规范 +1. **命名规范**: + - 类名:`UpperCamelCase`(如 `UserService`) + - 方法/变量名:`lowerCamelCase`(如 `saveUser`) + - 常量:`UPPER_SNAKE_CASE`(如 `MAX_LOGIN_ATTEMPTS`) +2. **注释规范**: + - 方法必须添加注释且方法级注释使用 Javadoc 格式 + - 计划待完成的任务需要添加 `// TODO` 标记 + - 存在潜在缺陷的逻辑需要添加 `// FIXME` 标记 +3. **代码格式化**: + - 使用 IntelliJ IDEA 默认的 Spring Boot 风格 + - 禁止手动修改代码缩进(依赖 IDE 自动格式化) + +--- + +## 十、扩展性设计规范 +1. **接口优先**: + - 服务层接口与实现(`UserService`)合并,不需要将实现类(`UserServiceImpl`)单独拎出代码 +2. **扩展点预留**: + - 关键业务逻辑需提供 `Strategy` 或 `Template` 模式支持扩展 +3. **日志规范**: + - 使用 `SLF4J` 记录日志(禁止直接使用 `System.out.println`) + - 核心操作需记录 `INFO` 级别日志,异常记录 `ERROR` 级别 +``` \ No newline at end of file