菜单优化
This commit is contained in:
+25
-16
@@ -37,13 +37,14 @@ workutils/
|
||||
|
||||
```
|
||||
src/main/java/com/example/workutils/
|
||||
├── WorkUtilsAppliction.java # 应用启动入口
|
||||
├── WorkUtilsApplication.java # 应用启动入口
|
||||
├── config/
|
||||
│ └── WorkUtilsProperties.java # 全局配置属性类
|
||||
├── tool/
|
||||
│ ├── Tool.java # 工具策略接口
|
||||
│ ├── AbstractTool.java # 工具基类(模板方法模式)
|
||||
│ └── ToolRegistry.java # 工具注册中心
|
||||
│ ├── ToolRegistry.java # 工具注册中心
|
||||
│ └── ConsoleHelper.java # 控制台交互工具类(消除重复I/O代码)
|
||||
├── menu/
|
||||
│ └── api/
|
||||
│ └── MenuRunner.java # 交互式菜单运行器
|
||||
@@ -104,12 +105,12 @@ src/main/java/com/example/workutils/
|
||||
|
||||
### 3.1 入口层
|
||||
|
||||
#### `WorkUtilsAppliction.java`
|
||||
#### `WorkUtilsApplication.java`
|
||||
- **作用**: Spring Boot 应用启动类,实现 `CommandLineRunner`
|
||||
- **功能**:
|
||||
- 支持交互式菜单模式(无参数启动)
|
||||
- 支持命令行模式(`sql`、`scan` 命令)
|
||||
- 通过 `MenuRunner` 动态构建主菜单
|
||||
- 支持命令行模式,通过 `ToolRegistry.getToolByCommand()` 按命令名分发到对应 Tool
|
||||
- 不依赖任何具体业务 Service,完全解耦
|
||||
|
||||
#### `WorkUtilsProperties.java`
|
||||
- **作用**: 全局配置属性类,绑定 `application.yml` 中 `workutils` 前缀的配置
|
||||
@@ -124,15 +125,20 @@ src/main/java/com/example/workutils/
|
||||
|
||||
#### `Tool.java`
|
||||
- **作用**: 工具策略接口,所有可插拔工具需实现此接口
|
||||
- **核心方法**: `getId()`、`getName()`、`getMenuOptions()`、`execute()`
|
||||
- **核心方法**: `getId()`、`getName()`、`getMenuOptions()`、`execute()`、`getCommandName()`(命令行模式命令名)、`executeCommand()`(命令行模式执行)
|
||||
|
||||
#### `AbstractTool.java`
|
||||
- **作用**: 工具基类,使用模板方法模式
|
||||
- **功能**: 提供标准菜单交互循环(显示菜单→读取选择→处理选择→循环),子类只需实现 `handleChoice()`
|
||||
- **控制台I/O**: 委托给 `ConsoleHelper`,子类通过 `printMenuTitle()`、`displayMenu()` 等 protected 方法间接调用
|
||||
|
||||
#### `ConsoleHelper.java`
|
||||
- **作用**: 控制台交互工具类(静态方法)
|
||||
- **功能**: 统一 `MenuRunner` 和 `AbstractTool` 中重复的控制台 I/O 方法,消除代码重复
|
||||
|
||||
#### `ToolRegistry.java`
|
||||
- **作用**: 工具注册中心,Spring 自动发现 `Tool` Bean
|
||||
- **功能**: 根据配置过滤启用/禁用工具,支持白名单(enabled)和黑名单(disabled)模式
|
||||
- **功能**: 根据配置过滤启用/禁用工具,支持白名单(enabled)和黑名单(disabled)模式,同时维护按命令名(`getCommandName()`)的索引,支持命令行模式按命令名分发
|
||||
|
||||
---
|
||||
|
||||
@@ -224,7 +230,7 @@ src/main/resources/
|
||||
|
||||
| 模式/特点 | 应用位置 | 说明 |
|
||||
|-----------|---------|------|
|
||||
| **策略模式** | `Tool` + `AbstractTool` + Handler 实现 | 各工具通过实现 `Tool` 接口注册,可插拔扩展 |
|
||||
| **策略模式** | `Tool` + `AbstractTool` + Menu 实现 | 各工具通过实现 `Tool` 接口注册,可插拔扩展,支持交互和命令行双模式 |
|
||||
| **模板方法模式** | `AbstractTool` | 定义菜单交互骨架,子类实现 `handleChoice()` |
|
||||
| **策略模式** | `GitCommandStrategy` + 各 Strategy 实现 | Git 命令执行策略,`GitStrategyFactory` 管理注册 |
|
||||
| **工厂模式** | `ToolRegistry`、`GitStrategyFactory` | 自动发现和注册 Bean |
|
||||
@@ -233,24 +239,27 @@ src/main/resources/
|
||||
| **并发处理** | `GitCommandExecutor`、`ScanService` | 线程池并发执行 Git 命令和多项目扫描 |
|
||||
| **过滤器模式** | `MyBatisExportService` 内部类 | `SqlFilter` 接口实现表名/关键字/标签ID 过滤 |
|
||||
| **模板回调** | `FileOperationService.scanFilesRecursively` | 使用 `SimpleFileVisitor` 实现文件遍历回调 |
|
||||
| **工具类提取** | `ConsoleHelper` | 提取 `MenuRunner` 和 `AbstractTool` 中的重复控制台 I/O 代码 |
|
||||
|
||||
---
|
||||
|
||||
## 六、依赖关系图
|
||||
|
||||
```
|
||||
WorkUtilsAppliction (入口)
|
||||
├── MenuRunner (菜单系统)
|
||||
│ └── ToolRegistry (工具注册)
|
||||
│ ├── BatchMenu ──────────────→ ScanService + MyBatisExportService
|
||||
WorkUtilsApplication (入口)
|
||||
├── 交互模式 → MenuRunner
|
||||
│ └── ToolRegistry.getEnabledTools()
|
||||
│ ├── GitMenu ────────────────→ GitService
|
||||
│ ├── MyBatisMenu ────────────→ MyBatisExportService
|
||||
│ ├── MyBatisGeneratorMenu ───→ MyBatisGeneratorService
|
||||
│ └── ScanMenu ───────────────→ ScanService
|
||||
│ ├── ScanMenu ───────────────→ ScanService
|
||||
│ └── BatchMenu ──────────────→ ScanService + MyBatisExportService
|
||||
│
|
||||
└── 命令行模式
|
||||
├── sql → MyBatisExportService
|
||||
└── scan → ScanService
|
||||
└── 命令行模式 → ToolRegistry.getToolByCommand(command)
|
||||
├── "sql" → MyBatisMenu.executeCommand(args)
|
||||
├── "scan" → ScanMenu.executeCommand(args)
|
||||
└── "batch" → BatchMenu.executeCommand(args)
|
||||
(启动类不依赖任何具体业务Service)
|
||||
|
||||
核心依赖链:
|
||||
MyBatisExportService → FileOperationService + OutputService
|
||||
|
||||
Reference in New Issue
Block a user