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_...

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的模块系统会自动解析文件路径大部分引用不需要手动更新。但为了确保项目结构清晰建议

  1. 保持import语句简洁: 不需要显式import每个子目录
  2. 使用相对路径: Swift会自动处理文件引用
  3. 更新文档: 确保文档反映新的项目结构

验证步骤

1. 编译验证

xcodebuild -project MyQrCode.xcodeproj -scheme MyQrCode -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.5' build

2. 功能测试

  • 扫描功能正常工作
  • 生成功能正常工作
  • 历史记录功能正常工作
  • 设置功能正常工作
  • 启动页面正常显示

3. 导航测试

  • 所有NavigationLink正常工作
  • 页面跳转无错误
  • 返回功能正常

总结

通过这次项目结构重构MyQrCode应用获得了

  • 更清晰的项目结构: 按功能分组,便于理解和维护
  • 更好的代码组织: 相关文件集中,减少查找时间
  • 更高的可扩展性: 新功能可以很容易地集成到现有结构中
  • 更好的团队协作: 开发者可以快速定位相关代码

这种结构化的组织方式为项目的长期维护和扩展奠定了良好的基础。