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