8.0 KiB
8.0 KiB
Contract-Manager 技术架构文档
📋 项目概述
Contract-Manager 是一个基于 Spring Boot 后端 + JavaFX 客户端的企业合同管理系统,采用模块化设计,支持多业务域的企业级应用开发。
🏗️ 技术栈
服务端 (Server Module)
- 基础框架: Spring Boot 3.3.7
- Java 版本: Java 21
- 数据库访问: Spring Data JPA 3.3.7
- 数据库: MySQL 8.0.33
- 缓存: Redis
- 构建工具: Maven 3.x
- 开发工具: Lombok 1.18.32
- 文档处理: Apache POI 5.2.5, PDFBox 3.0.1
- 云服务集成: 支持第三方云服务API集成
客户端 (Client Module)
- UI框架: JavaFX 21
- Java 版本: Java 21
- UI组件库: ControlsFX 11.1.2
- 开发工具: Lombok 1.18.32
- 缓存: Caffeine 3.1.8
- 通信: WebSocket 与服务端通信
- 界面: FXML 格式界面文件
公共模块 (Common Module)
- Java 版本: Java 21
- 开发工具: Lombok 1.18.32
- 共享内容: 常量定义、实体模型、视图对象、通用工具类
🏛️ 架构设计
整体架构图
graph TB
subgraph "客户端层 (Client Layer)"
A[JavaFX UI] --> B[FXML 界面]
A --> C[Controller 控制器]
A --> D[ViewModel 视图模型]
A --> E[Service 层]
end
subgraph "业务层 (Business Layer)"
C --> F[Controller API]
E --> G[Service 业务逻辑]
G --> H[Repository 数据访问]
end
subgraph "数据层 (Data Layer)"
H --> I[JPA Repository]
I --> J[MySQL 数据库]
end
subgraph "缓存层 (Cache Layer)"
G --> K[Redis 缓存]
E --> L[Caffeine 缓存]
end
subgraph "公共层 (Common Layer)"
M[Entity 实体模型]
N[VO 视图对象]
O[Constants 常量]
P[Utils 工具类]
end
H --> M
G --> N
M --> O
G --> P
subgraph "外部服务 (External Services)"
Q[云服务 API]
R[第三方集成]
end
G --> Q
G --> R
模块架构说明
1. 客户端模块 (client/)
src/main/java/com/ecep/contract/
├── controller/ # JavaFX 控制器
│ ├── CompanyController.java
│ ├── ContractController.java
│ └── ...
├── service/ # 客户端服务层
│ ├── CompanyService.java
│ └── ...
├── task/ # 任务处理类
├── vm/ # 视图模型 (ViewModel)
├── converter/ # 类型转换器
├── serializer/ # 序列化类
└── util/ # 工具类
2. 服务端模块 (server/)
src/main/java/com/ecep/contract/
├── api/ # API 接口定义
├── config/ # Spring 配置类
├── controller/ # Web 控制器
├── ds/ # 数据访问层 (按业务域组织)
│ ├── company/ # 公司相关业务
│ │ ├── model/ # 实体类
│ │ ├── repository/ # 数据访问接口
│ │ ├── service/ # 业务逻辑服务
│ │ ├── tasker/ # 任务处理器
│ │ └── controller/ # 控制器
│ ├── contract/ # 合同相关业务
│ ├── customer/ # 客户相关业务
│ ├── project/ # 项目相关业务
│ └── vendor/ # 供应商相关业务
├── service/ # 通用服务和任务处理器
├── handler/ # WebSocket 处理器
├── ui/ # UI 相关组件
└── util/ # 工具类
3. 公共模块 (common/)
src/main/java/ecep/contract/
├── constant/ # 常量类 (按业务域组织)
├── model/ # 实体类 (按业务域组织)
├── vo/ # 视图对象 (按业务域组织)
└── util/ # 工具类
🎯 核心设计模式
1. 分层架构模式
- 表示层: JavaFX UI + FXML
- 业务逻辑层: Service + Task + Controller
- 数据访问层: Repository + Entity
- 基础设施层: 配置、缓存、工具类
2. 领域驱动设计 (DDD)
项目采用领域驱动设计,按业务域组织代码:
- Company (公司域): 公司信息、联系人、文件管理
- Contract (合同域): 合同管理、目录分类、文件处理
- Customer (客户域): 客户关系、分类管理
- Project (项目域): 项目管理、文件跟踪
- Vendor (供应商域): 供应商管理、评价体系
3. 接口分离原则
服务端 Service 实现三个核心接口:
public interface IEntityService<T> {
T save(T entity);
void delete(T entity);
T getById(Integer id);
Page<T> findAll(Specification<T> spec, Pageable pageable);
}
public interface QueryService<Vo> {
Vo findById(Integer id);
Page<Vo> findAll(JsonNode paramsNode, Pageable pageable);
}
public interface VoableService<M, Vo> {
void updateByVo(M model, Vo vo);
}
4. 缓存策略模式
- 多级缓存: Caffeine (客户端) + Redis (服务端)
- 缓存键设计: 按查询类型设计唯一键
- 缓存清理: 数据修改时清理相关缓存
🔗 模块间通信
1. 客户端-服务端通信
- 协议: HTTP REST API + WebSocket
- 数据格式: JSON
- 序列化: 统一使用 VO 对象进行数据传输
2. 服务端内部通信
- 依赖注入: Spring IoC 容器管理
- 服务调用: 延迟加载 (@Lazy) 避免循环依赖
- 事务管理: @Transactional 确保数据一致性
3. 数据流转
Entity (数据库) ↔ Repository ↔ Service ↔ VO ↔ JSON ↔ Client
🛡️ 安全与性能
1. 安全设计
- API 认证: 基于 JWT 的身份认证机制
- 权限控制: 基于角色的访问控制 (RBAC)
- 数据验证: 输入参数校验和 SQL 注入防护
2. 性能优化
- 延迟加载: @Lazy 避免循环依赖
- 缓存策略: 多级缓存减少数据库访问
- 分页查询: 大数据集分页处理
- 批量操作: 批量保存和更新
3. 监控与日志
- 应用监控: Spring Boot Actuator
- 日志管理: SLF4J + Logback
- 性能监控: 缓存命中率、响应时间
📦 依赖管理
Maven 模块结构
parent
├── client # 客户端模块
├── common # 公共模块
└── server # 服务端模块
关键依赖说明
- Spring Boot Starter: 快速集成 Spring 生态
- Spring Data JPA: 简化数据访问层开发
- Lombok: 减少样板代码
- Caffeine: 高性能本地缓存
- JavaFX: 现代化桌面应用 UI
🚀 开发规范
1. 命名规范
- 类名: 驼峰命名法,以业务含义命名
- 接口名: 以 I 开头 + 业务描述
- 控制器: 以 Controller 结尾
- 服务类: 以 Service 结尾
- 仓储接口: 以 Repository 结尾
2. 编码规范
- 注解使用: 合理使用 Spring、Lombok 等注解
- 异常处理: 统一异常处理机制
- 单元测试: 核心业务逻辑必须有测试覆盖
- 代码注释: 关键逻辑和复杂业务需要 JavaDoc
3. 配置管理
- 环境配置: 多环境配置 (dev, test, prod)
- 敏感信息: 使用 .env 文件管理 API 密钥等
- 配置分离: 业务配置与框架配置分离
📊 扩展性设计
1. 模块化设计
- 业务域分离: 不同业务域独立开发和部署
- 接口标准化: 统一的 Service 接口设计
- 组件复用: 基础组件可在多个业务域复用
2. 水平扩展
- 无状态设计: Service 层无状态设计支持集群部署
- 缓存分离: Redis 支持分布式缓存
- 数据库分离: 支持读写分离和分库分表
3. 垂直扩展
- 微服务拆分: 按业务域可拆分为微服务
- 插件化: 支持新业务域的快速集成
本文档反映了 Contract-Manager 项目的整体技术架构和设计理念,为项目开发、部署和维护提供指导。