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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 项目结构重构文档
## 概述
本文档记录了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应用获得了
- **更清晰的项目结构**: 按功能分组,便于理解和维护
- **更好的代码组织**: 相关文件集中,减少查找时间
- **更高的可扩展性**: 新功能可以很容易地集成到现有结构中
- **更好的团队协作**: 开发者可以快速定位相关代码
这种结构化的组织方式为项目的长期维护和扩展奠定了良好的基础。