project_rule.md 13 KB

开发规范指南

为保证代码质量、可维护性、安全性与可扩展性,请在开发过程中严格遵循以下规范。

一、项目基本信息

  • 工作目录D:\IDEA2024\HazMatSpider
  • 项目作者:xiongwanxiong
  • 操作系统:Windows 11
  • 当前时间:2025-11-26 09:27:58

二、技术栈要求

  • 主框架:Spring Boot 2.5.15
  • 语言版本:Java 1.8
  • 构建工具:Maven
  • SDK版本:JDK 1.8.0_231
  • 数据库:MySQL 8.0
  • 前端框架:Vue 3 + Element Plus

三、目录结构

HazMatSpider
├── doc
├── spider-admin
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── spider
│           │           └── web
│           │               ├── controller
│           │               │   ├── common
│           │               │   ├── monitor
│           │               │   ├── system
│           │               │   └── tool
│           │               └── core
│           │                   └── config
│           └── resources
│               ├── i18n
│               ├── META-INF
│               └── mybatis
├── spider-common
│   └── src
│       └── main
│           └── java
│               └── com
│                   └── spider
│                       └── common
│                           ├── annotation
│                           ├── config
│                           │   └── serializer
│                           ├── constant
│                           ├── core
│                           │   ├── controller
│                           │   ├── domain
│                           │   │   ├── entity
│                           │   │   └── model
│                           │   ├── page
│                           │   ├── redis
│                           │   └── text
│                           ├── enums
│                           ├── exception
│                           │   ├── base
│                           │   ├── file
│                           │   ├── job
│                           │   └── user
│                           ├── filter
│                           ├── utils
│                           │   ├── bean
│                           │   ├── file
│                           │   ├── html
│                           │   ├── http
│                           │   ├── ip
│                           │   ├── poi
│                           │   ├── reflect
│                           │   ├── sign
│                           │   ├── spring
│                           │   ├── sql
│                           │   └── uuid
│                           └── xss
├── spider-framework
│   └── src
│       └── main
│           └── java
│               └── com
│                   └── spider
│                       └── framework
│                           ├── aspectj
│                           ├── config
│                           │   └── properties
│                           ├── datasource
│                           ├── interceptor
│                           │   └── impl
│                           ├── manager
│                           │   └── factory
│                           ├── security
│                           │   ├── context
│                           │   ├── filter
│                           │   └── handle
│                           └── web
│                               ├── domain
│                               │   └── server
│                               ├── exception
│                               └── service
├── spider-generator
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── spider
│           │           └── generator
│           │               ├── config
│           │               ├── controller
│           │               ├── domain
│           │               ├── mapper
│           │               ├── service
│           │               └── util
│           └── resources
│               ├── mapper
│               │   └── generator
│               └── vm
│                   ├── java
│                   ├── js
│                   ├── sql
│                   ├── vue
│                   │   └── v3
│                   └── xml
├── spider-quartz
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── spider
│           │           └── quartz
│           │               ├── config
│           │               ├── controller
│           │               ├── domain
│           │               ├── enums
│           │               ├── mapper
│           │               ├── service
│           │               │   └── impl
│           │               ├── task
│           │               └── util
│           └── resources
│               └── mapper
│                   └── quartz
├── spider-system
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── spider
│           │           └── system
│           │               ├── domain
│           │               │   └── vo
│           │               ├── mapper
│           │               └── service
│           │                   └── impl
│           └── resources
│               └── mapper
│                   └── system
├── spider-ui
│   ├── node_modules
│   └── src
│       ├── api
│       │   ├── monitor
│       │   ├── system
│       │   │   └── dict
│       │   └── tool
│       ├── assets
│       │   ├── 401_images
│       │   ├── 404_images
│       │   ├── icons
│       │   │   └── svg
│       │   ├── images
│       │   ├── logo
│       │   └── styles
│       ├── components
│       │   ├── Breadcrumb
│       │   ├── Crontab
│       │   ├── DictData
│       │   ├── DictTag
│       │   ├── Editor
│       │   ├── FileUpload
│       │   ├── Hamburger
│       │   ├── HeaderSearch
│       │   ├── IconSelect
│       │   ├── iFrame
│       │   ├── ImagePreview
│       │   ├── ImageUpload
│       │   ├── Pagination
│       │   ├── PanThumb
│       │   ├── ParentView
│       │   ├── RightToolbar
│       │   ├── RuoYi
│       │   │   ├── Doc
│       │   │   └── Git
│       │   ├── Screenfull
│       │   ├── SizeSelect
│       │   ├── SvgIcon
│       │   ├── ThemePicker
│       │   └── TopNav
│       ├── directive
│       │   ├── dialog
│       │   ├── module
│       │   └── permission
│       ├── layout
│       │   ├── components
│       │   │   ├── Copyright
│       │   │   ├── IframeToggle
│       │   │   ├── InnerLink
│       │   │   ├── Settings
│       │   │   ├── Sidebar
│       │   │   └── TagsView
│       │   └── mixin
│       ├── plugins
│       ├── router
│       ├── store
│       │   └── modules
│       ├── utils
│       │   ├── dict
│       │   └── generator
│       └── views
│           ├── dashboard
│           │   └── mixins
│           ├── error
│           ├── monitor
│           │   ├── cache
│           │   ├── druid
│           │   ├── job
│           │   ├── logininfor
│           │   ├── online
│           │   ├── operlog
│           │   └── server
│           ├── system
│           │   ├── config
│           │   ├── dept
│           │   ├── dict
│           │   ├── menu
│           │   ├── notice
│           │   ├── post
│           │   ├── role
│           │   └── user
│           │       └── profile
│           └── tool
│               ├── gen
│               └── swagger
└── sql

四、分层架构规范

层级 职责说明 开发约束与注意事项
Controller 处理 HTTP 请求与响应,定义 API 接口 不得直接访问数据库,必须通过 Service 层调用
Service 实现业务逻辑、事务管理与数据校验 必须通过 Repository 层访问数据库;返回 DTO 而非 Entity(除非必要)
Repository 数据库访问与持久化操作 继承 JpaRepository;使用 @EntityGraph 避免 N+1 查询问题
Entity 映射数据库表结构 不得直接返回给前端(需转换为 DTO);包名统一为 entity

接口与实现分离

  • 所有接口实现类需放在接口所在包下的 impl 子包中。

五、安全与性能规范

输入校验

  • 使用 @Valid 与 JSR-303 校验注解(如 @NotBlank, @Size 等)

    • 注意:Spring Boot 2.5.15 中校验注解位于 jakarta.validation.constraints.*
  • 禁止手动拼接 SQL 字符串,防止 SQL 注入攻击。

事务管理

  • @Transactional 注解仅用于 Service 层方法。
  • 避免在循环中频繁提交事务,影响性能。

六、代码风格规范

命名规范

类型 命名方式 示例
类名 UpperCamelCase UserServiceImpl
方法/变量 lowerCamelCase saveUser()
常量 UPPER_SNAKE_CASE MAX_LOGIN_ATTEMPTS

注释规范

  • 所有类、方法、字段需添加 Javadoc 注释。
  • 注释使用中文,符合用户的语言习惯。

类型命名规范(阿里巴巴风格)

后缀 用途说明 示例
DTO 数据传输对象 UserDTO
DO 数据库实体对象 UserDO
BO 业务逻辑封装对象 UserBO
VO 视图展示对象 UserVO
Query 查询参数封装对象 UserQuery

实体类简化工具

  • 使用 Lombok 注解替代手动编写 getter/setter/构造方法:
    • @Data
    • @NoArgsConstructor
    • @AllArgsConstructor

七、扩展性与日志规范

接口优先原则

  • 所有业务逻辑通过接口定义(如 UserService),具体实现放在 impl 包中(如 UserServiceImpl)。

日志记录

  • 使用 @Slf4j 注解代替 System.out.println

八、通用依赖规则

核心依赖

  • spring-boot-starter-web
  • spring-boot-starter-data-jpa
  • lombok
  • druid-spring-boot-starter
  • kaptcha
  • oshi-core
  • spring-boot-starter-security
  • spring-boot-starter-validation
  • pagehelper-spring-boot-starter
  • fastjson2
  • commons-io
  • poi-ooxml
  • springfox-boot-starter
  • quartz
  • jsoup
  • selenium-java
  • webdrivermanager
  • playwright

构建工具

  • Maven 3.1.1

九、编码原则总结

原则 说明
SOLID 高内聚、低耦合,增强可维护性与可扩展性
DRY 避免重复代码,提高复用性
KISS 保持代码简洁易懂
YAGNI 不实现当前不需要的功能
OWASP 防范常见安全漏洞,如 SQL 注入、XSS 等