You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MyQRCode/docs/PROJECT_STRUCTURE_REFACTOR_...

286 lines
10 KiB

# 项目结构重构文档
## 概述
本文档记录了MyQrCode应用的项目结构重构过程将相关功能的view按类型分组到同一个组中提高代码的可维护性和可读性。
## 重构前的结构
```
MyQrCode/Views/
├── Components/ # 通用组件
├── ScannerView/ # 扫描相关(旧结构)
├── CreateCodeView.swift
├── CreateQRCodeView.swift
├── QRCodeStyleView.swift
├── CodeContentInputView.swift
├── CodeTypeSelectionView.swift
├── ImageComposerView.swift
├── HistoryView.swift
├── QRCodeDetailView.swift
├── QRCodeSavedView.swift
├── BarcodeDetailView.swift
├── BarcodePreviewView.swift
├── BarcodeCharacterHintView.swift
├── BarcodeValidationInfoView.swift
├── SettingsView.swift
├── AppPermissionsView.swift
├── PrivacyPolicyView.swift
├── LaunchScreenView.swift
└── 其他文件...
```
## 重构后的结构
```
MyQrCode/
├── Core/ # 核心文件
│ ├── MyQrCodeApp.swift
│ └── ContentView.swift
├── Managers/ # 管理器文件
│ ├── LanguageManager.swift
│ └── Logger.swift
├── Views/ # 视图文件
│ ├── Scanner/ # 扫描相关功能
│ │ ├── ScannerView.swift
│ │ ├── ScannerViewModel.swift
│ │ ├── CameraPermissionView.swift
│ │ ├── CameraPreviewView.swift
│ │ ├── ScanningOverlayView.swift
│ │ ├── CodePositionOverlay.swift
│ │ ├── ScanningLineView.swift
│ │ ├── Models.swift
│ │ └── TestAutoSelectButton.swift
│ ├── Generator/ # 生成相关功能
│ │ ├── CreateCodeView.swift
│ │ ├── CreateQRCodeView.swift
│ │ ├── QRCodeStyleView.swift
│ │ ├── CodeContentInputView.swift
│ │ ├── CodeTypeSelectionView.swift
│ │ └── ImageComposerView.swift
│ ├── History/ # 历史记录相关功能
│ │ ├── HistoryView.swift
│ │ ├── QRCodeDetailView.swift
│ │ ├── QRCodeSavedView.swift
│ │ ├── BarcodeDetailView.swift
│ │ ├── BarcodePreviewView.swift
│ │ ├── BarcodeCharacterHintView.swift
│ │ └── BarcodeValidationInfoView.swift
│ ├── Settings/ # 设置相关功能
│ │ ├── SettingsView.swift
│ │ ├── AppPermissionsView.swift
│ │ ├── PrivacyPolicyView.swift
│ │ └── LanguageSettingsView.swift
│ ├── Components/ # 通用组件
│ │ ├── CardView.swift
│ │ ├── FormView.swift
│ │ ├── InputFieldView.swift
│ │ ├── ListView.swift
│ │ ├── PickerView.swift
│ │ ├── QRCodePreviewView.swift
│ │ ├── ValidationView.swift
│ │ ├── UtilityFunctions.swift
│ │ ├── InputComponentFactory.swift
│ │ ├── InputTitleView.swift
│ │ ├── InputHintView.swift
│ │ ├── KeyboardToolbarView.swift
│ │ ├── TextInputView.swift
│ │ ├── TextEditorView.swift
│ │ ├── URLInputView.swift
│ │ ├── EmailInputView.swift
│ │ ├── PhoneInputView.swift
│ │ ├── ContactInputView.swift
│ │ ├── LocationInputView.swift
│ │ ├── WiFiInputView.swift
│ │ ├── SocialInputView.swift
│ │ ├── CalendarInputView.swift
│ │ └── DatePickerView.swift
│ └── Utils/ # 工具类
│ └── LaunchScreenView.swift
├── Models/ # 数据模型
├── Utils/ # 工具类
├── Resources/ # 资源文件
├── Assets.xcassets/ # 资源文件
├── Docs/ # 文档文件
│ ├── MULTILINGUAL_FIX_SUMMARY.md
│ └── CODE_OPTIMIZATION_SUMMARY.md
├── Info.plist # 应用配置
└── *.lproj/ # 本地化文件
```
## 分组原则
### 1. Core组
**功能**: 应用核心文件
**包含文件**:
- `MyQrCodeApp.swift` - 应用入口点
- `ContentView.swift` - 主内容视图
### 2. Managers组
**功能**: 应用管理器
**包含文件**:
- `LanguageManager.swift` - 语言管理器
- `Logger.swift` - 日志管理器
### 3. Views组
**功能**: 所有视图文件,按功能进一步分组
#### 3.1 Scanner组
**功能**: 扫描二维码和条形码
**包含文件**:
- `ScannerView.swift` - 主扫描界面
- `ScannerViewModel.swift` - 扫描逻辑管理
- `CameraPermissionView.swift` - 相机权限界面
- `CameraPreviewView.swift` - 相机预览界面
- `ScanningOverlayView.swift` - 扫描覆盖层
- `CodePositionOverlay.swift` - 代码位置覆盖层
- `ScanningLineView.swift` - 扫描线动画
- `Models.swift` - 扫描相关数据模型
- `TestAutoSelectButton.swift` - 测试自动选择按钮
#### 3.2 Generator组
**功能**: 生成二维码和条形码
**包含文件**:
- `CreateCodeView.swift` - 创建代码主界面
- `CreateQRCodeView.swift` - 创建二维码界面
- `QRCodeStyleView.swift` - 二维码样式选择界面
- `CodeContentInputView.swift` - 代码内容输入界面
- `CodeTypeSelectionView.swift` - 代码类型选择界面
- `ImageComposerView.swift` - 图片合成界面
#### 3.3 History组
**功能**: 历史记录管理
**包含文件**:
- `HistoryView.swift` - 历史记录主界面
- `QRCodeDetailView.swift` - 二维码详情界面
- `QRCodeSavedView.swift` - 二维码保存界面
- `BarcodeDetailView.swift` - 条形码详情界面
- `BarcodePreviewView.swift` - 条形码预览界面
- `BarcodeCharacterHintView.swift` - 条形码字符提示界面
- `BarcodeValidationInfoView.swift` - 条形码验证信息界面
#### 3.4 Settings组
**功能**: 应用设置
**包含文件**:
- `SettingsView.swift` - 设置主界面
- `AppPermissionsView.swift` - 应用权限界面
- `PrivacyPolicyView.swift` - 隐私政策界面
- `LanguageSettingsView.swift` - 语言设置界面
#### 3.5 Components组
**功能**: 通用UI组件
**包含文件**: 所有可复用的UI组件
#### 3.6 Utils组
**功能**: 视图工具类
**包含文件**:
- `LaunchScreenView.swift` - 启动页面
### 4. 其他组
- **Models**: 数据模型文件
- **Utils**: 工具类文件
- **Resources**: 资源文件
- **Docs**: 文档文件
- **Assets.xcassets**: 资源文件
- **Info.plist**: 应用配置
- ***.lproj**: 本地化文件
## 重构优势
### 1. 提高可维护性
- **功能分组**: 相关功能文件集中在一起,便于查找和维护
- **职责清晰**: 每个组都有明确的职责范围
- **减少耦合**: 不同功能组之间的依赖关系更清晰
### 2. 提高可读性
- **结构清晰**: 新开发者可以快速理解项目结构
- **导航便利**: 在IDE中可以更容易地导航到相关文件
- **文档化**: 通过文件夹结构自动形成文档
### 3. 便于扩展
- **模块化**: 每个功能组可以独立开发和测试
- **可复用**: 通用组件可以在不同功能组中复用
- **可扩展**: 新增功能时可以很容易地确定放置位置
## 技术实现
### 文件移动
使用命令行工具进行文件移动:
```bash
# 创建新的目录结构
mkdir -p MyQrCode/Core
mkdir -p MyQrCode/Managers
mkdir -p MyQrCode/Views/{Scanner,Generator,History,Settings,Utils}
mkdir -p MyQrCode/Docs
# 移动核心文件
mv MyQrCode/MyQrCodeApp.swift MyQrCode/Core/
mv MyQrCode/ContentView.swift MyQrCode/Core/
# 移动管理器文件
mv MyQrCode/LanguageManager.swift MyQrCode/Managers/
mv MyQrCode/Logger.swift MyQrCode/Managers/
# 移动视图文件
mv MyQrCode/Views/ScannerView/* MyQrCode/Views/Scanner/
mv MyQrCode/Views/CreateCodeView.swift MyQrCode/Views/Generator/
mv MyQrCode/Views/CreateQRCodeView.swift MyQrCode/Views/Generator/
mv MyQrCode/Views/QRCodeStyleView.swift MyQrCode/Views/Generator/
mv MyQrCode/Views/CodeContentInputView.swift MyQrCode/Views/Generator/
mv MyQrCode/Views/CodeTypeSelectionView.swift MyQrCode/Views/Generator/
mv MyQrCode/Views/ImageComposerView.swift MyQrCode/Views/Generator/
mv MyQrCode/Views/HistoryView.swift MyQrCode/Views/History/
mv MyQrCode/Views/QRCodeDetailView.swift MyQrCode/Views/History/
mv MyQrCode/Views/QRCodeSavedView.swift MyQrCode/Views/History/
mv MyQrCode/Views/BarcodeDetailView.swift MyQrCode/Views/History/
mv MyQrCode/Views/BarcodePreviewView.swift MyQrCode/Views/History/
mv MyQrCode/Views/BarcodeCharacterHintView.swift MyQrCode/Views/History/
mv MyQrCode/Views/BarcodeValidationInfoView.swift MyQrCode/Views/History/
mv MyQrCode/Views/SettingsView.swift MyQrCode/Views/Settings/
mv MyQrCode/Views/AppPermissionsView.swift MyQrCode/Views/Settings/
mv MyQrCode/Views/PrivacyPolicyView.swift MyQrCode/Views/Settings/
mv MyQrCode/LanguageSettingsView.swift MyQrCode/Views/Settings/
mv MyQrCode/Views/LaunchScreenView.swift MyQrCode/Views/Utils/
# 移动文档文件
mv MyQrCode/MULTILINGUAL_FIX_SUMMARY.md MyQrCode/Docs/
mv MyQrCode/CODE_OPTIMIZATION_SUMMARY.md MyQrCode/Docs/
```
### 引用更新
由于Swift的模块系统会自动解析文件路径大部分引用不需要手动更新。但为了确保项目结构清晰建议
1. **保持import语句简洁**: 不需要显式import每个子目录
2. **使用相对路径**: Swift会自动处理文件引用
3. **更新文档**: 确保文档反映新的项目结构
## 验证步骤
### 1. 编译验证
```bash
xcodebuild -project MyQrCode.xcodeproj -scheme MyQrCode -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' build
```
### 2. 功能测试
- 扫描功能正常工作
- 生成功能正常工作
- 历史记录功能正常工作
- 设置功能正常工作
- 启动页面正常显示
### 3. 导航测试
- 所有NavigationLink正常工作
- 页面跳转无错误
- 返回功能正常
## 总结
通过这次项目结构重构MyQrCode应用获得了
- **更清晰的项目结构**: 按功能分组,便于理解和维护
- **更好的代码组织**: 相关文件集中,减少查找时间
- **更高的可扩展性**: 新功能可以很容易地集成到现有结构中
- **更好的团队协作**: 开发者可以快速定位相关代码
这种结构化的组织方式为项目的长期维护和扩展奠定了良好的基础。