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.
10 KiB
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. 便于扩展
- 模块化: 每个功能组可以独立开发和测试
- 可复用: 通用组件可以在不同功能组中复用
- 可扩展: 新增功能时可以很容易地确定放置位置
技术实现
文件移动
使用命令行工具进行文件移动:
# 创建新的目录结构
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的模块系统会自动解析文件路径,大部分引用不需要手动更新。但为了确保项目结构清晰,建议:
- 保持import语句简洁: 不需要显式import每个子目录
- 使用相对路径: Swift会自动处理文件引用
- 更新文档: 确保文档反映新的项目结构
验证步骤
1. 编译验证
xcodebuild -project MyQrCode.xcodeproj -scheme MyQrCode -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' build
2. 功能测试
- 扫描功能正常工作
- 生成功能正常工作
- 历史记录功能正常工作
- 设置功能正常工作
- 启动页面正常显示
3. 导航测试
- 所有NavigationLink正常工作
- 页面跳转无错误
- 返回功能正常
总结
通过这次项目结构重构,MyQrCode应用获得了:
- 更清晰的项目结构: 按功能分组,便于理解和维护
- 更好的代码组织: 相关文件集中,减少查找时间
- 更高的可扩展性: 新功能可以很容易地集成到现有结构中
- 更好的团队协作: 开发者可以快速定位相关代码
这种结构化的组织方式为项目的长期维护和扩展奠定了良好的基础。