# 查重逻辑划分

### **1. 核心模块划分**
| 模块名 | 职责 | 包含内容 |
|--------|------|----------|
| **`core`** (核心逻辑) | 处理核心查重算法 | 文件遍历、哈希计算、查重逻辑 |
| **`io`** (I/O处理) | 文件系统交互 | 文件读取、内存映射、并行I/O优化 |
| **`model`** (数据模型) | 定义数据结构 | 文件元数据、哈希结果、查重报告 |
| **`ui`** (用户界面) | GUI展示 | JavaFX面板、控制器、事件处理 |
| **`util`** (工具类) | 公用功能 | 哈希工具、进度计算、日志记录 |

---

### **2. 模块依赖关系**
```mermaid
graph TD
    ui --> core
    ui --> model
    core --> io
    core --> model
    core --> util
    io --> util
```

---

### **3. 进阶模块（可选扩展）**
| 模块名 | 用途 |
|--------|------|
| **`api`** | 提供REST接口供其他系统调用 |
| **`cli`** | 命令行界面（脱离JavaFX使用） |
| **`plugin`** | 支持扩展哈希算法或存储后端 |

---

### **4. 目录结构示例**
```
src/
├── main/
│   ├── java/
│   │   ├── top.r3.doc/
│   │   │   ├── core/
│   │   │   ├── io/
│   │   │   ├── model/
│   │   │   ├── ui/
│   │   │   ├── util/
│   │   │   └── Main.java (主入口)
│   └── resources/ (FXML/CSS)
└── test/ (对应模块的单元测试)
```

---

### **5. 关键设计原则**
1. **单一职责**：每个模块只做一件事（如`io`模块只处理I/O）
2. **依赖倒置**：高层模块（如`ui`）依赖抽象（接口），不依赖具体实现
3. **可测试性**：核心逻辑与UI分离，便于单元测试
4. **扩展性**：通过策略模式（如`FileHashStrategy`）支持新哈希算法

---

### **6. 优化后的查重流程**
```mermaid
sequenceDiagram
    UI->>+Core: 启动查重(rootPath)
    Core->>+IO: 遍历文件(rootPath)
    IO-->>-Core: 返回文件列表
    loop 每个文件
        Core->>+IO: 读取文件内容
        IO-->>-Core: 返回字节数据
        Core->>+Util: 计算哈希
        Util-->>-Core: 返回哈希值
    end
    Core->>+Model: 生成查重报告
    Model-->>-UI: 显示结果
```