Files
contract-manager/ARCHITECTURE.md
songqq 02afa189f8 feat(contract): 新增合同余额功能及重构文件管理
重构合同文件管理逻辑,增加错误处理和日志记录
新增ContractBalance实体、Repository和VO类
完善Voable接口文档和实现规范
更新项目架构文档和数据库设计
修复SmbFileService的连接问题
移动合同相关TabSkin类到contract包
添加合同文件重建任务的WebSocket支持
2025-11-19 00:50:16 +08:00

265 lines
8.0 KiB
Markdown

# 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
- **共享内容**: 常量定义、实体模型、视图对象、通用工具类
## 🏛️ 架构设计
### 整体架构图
```mermaid
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 实现三个核心接口:
```java
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 项目的整体技术架构和设计理念,为项目开发、部署和维护提供指导。*