# 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 save(T entity); void delete(T entity); T getById(Integer id); Page findAll(Specification spec, Pageable pageable); } public interface QueryService { Vo findById(Integer id); Page findAll(JsonNode paramsNode, Pageable pageable); } public interface VoableService { 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 项目的整体技术架构和设计理念,为项目开发、部署和维护提供指导。*