Xcode 项目组结构的最佳实践?

Best practice for an Xcode project groups structure?

在提供代码示例的教程和示例中,有时我会看到 Xcode 的项目导航器中的项目文件按照 MVC 模式按组排列("Views"、"Controllers", "Model"), 有时它们按功能分组 (例如 "Login", "Checklist").

关于iOS,有苹果的convention/recommendation吗? 哪个应该是最佳做法?

开发人员以多种方式组织他们的组、代码和文件。但是我使用类似下面的东西:

  • CoreData:包含数据模型和实体类。

  • 扩展:包含一个class(默认苹果class扩展+项目class扩展。)

  • Helper:包含第三方classes/Frameworks(例如SWRevealController)+桥接classes(例如Obj C class 在基于 Swift 的项目中)

  • Model:创建一个单例class(eg.AppModel - NSArray、NSDictionary、String 等)用于保存数据。 Web Service Response 解析和存储数据也在这里完成。

  • 服务:包含 Web 服务进程(例如登录验证、HTTP Request/Response)

  • 视图:包含故事板、LaunchScreen.XIB 和视图类。创建一个子文件夹 Cells - 包含 UITableViewCell、UICollectionViewCell 等

  • Controller: Contain Logic or Code related to UIElements (eg. UIButton's reference+ clicked action) 可以用ViewModel[=代替60=] 如果使用 MVVM。

此结构来自another Stack Overflow post.

这些也可能对您有所帮助:

  1. http://akosma.com/2009/07/28/code-organization-in-xcode-projects/

  2. https://github.com/futurice/ios-good-practices/issues/28

  3. http://www.slideshare.net/MassimoOliviero/architecting-ios-project

我实际上创建了一个项目来演示我认为适合中小型代码库的 Xcode 项目结构。你可以找到它 here.

这是它的概要:

  • 来源 - 所有源代码
    • 帐户 - 帐户相关 类(会话相关 类、帐户逻辑等)
    • 应用程序 - 应用程序相关 类。应用委托、配置 类、等
    • 核心添加 - 扩展和 sub类 来自 apple 的 类
      • 实用程序 - 通用实用程序 类。有用的扩展、格式化实用程序、便利 类 等等
      • 基于元素的文件夹 - UIView、UITableViewCell 等的文件夹
    • 本地持久性 - 本地持久性层。与本地数据库(领域、核心数据)的所有交互
      • 存储库 - 所有与模型相关的本地持久性逻辑
    • 常量 - 所有常量。 URL、字体、颜色、错误等
    • 模型 - 所有模型(服务器端实体的表示)。我们还会在这里抛出任何对象映射逻辑
    • 模块 - 在这里我们可以找到按功能划分的应用程序的每个部分
      • 基于模块的文件夹 - 每个文件夹包含所有特定于模块的视图控制器、视图、委托和相关 类
    • 网络 - 应用程序的网络层(例如 类 负责与网络服务交互)
      • 服务 - 所有与模型相关的网络逻辑
  • 故事板 - 包含所有故事板文件
  • 资源 - 任何其他资源,如媒体、文档、本地化文件等

在项目中组织文件时,有两种最广为人知的方法。 按类型按功能组织代码文件。

按类型组织代码

按类型组织代码对于小项目来说是可以的,但对于大项目来说不是一个好习惯。

这样,你把所有Models放在一个文件夹里,所有Views放在另一个文件夹里,所有Controllers 在第三个文件夹等

试想一下,您有大量按类型组织的文件和文件夹,当您处理单个功能时,您必须打开所有文件夹。这会让您感到困惑,并且在滚动浏览文件时可能会迷路很多次。

像这样:

  • AppDelegate
  • 查看控制器
    • 功能 1 VC
    • 特征 2 风投
    • 特征 3 风投
  • 模型
    • 特征 1 模型
    • 特征 2 模型
    • 特征 3 模型
  • 观看次数
    • 专题 1 浏览量
    • 专题 2 次浏览
    • 专题 3 次浏览
  • 扩展
    • 功能 1 扩展
    • 功能 2 扩展
    • 功能 3 扩展
  • 网络
  • 资源

按功能(意图)组织代码

按功能(意图)组织代码是大型项目和大型团队的最佳实践。您将与该功能相关的所有内容都放在一个文件夹中,并且在处理该功能时,您不必打开所有其他文件夹(组)。

因为团队通常只专注于一个功能,他们只关注一个文件夹或一组文件。他们不一定需要了解其他功能和文件。

看起来像这样:

  • AppDelegate
  • 特点
    • 特征 1
      • 查看控制器
      • 型号
      • 观看次数
      • 逻辑
    • 特征 2
      • 查看控制器
      • 型号
      • 观看次数
      • 逻辑
  • 网络
    • 型号
    • 逻辑
    • 扩展程序
  • 资源

此外,值得一提的是,这种做法和技术(按功能组织项目)已被世界上最大的公司所采用。因此,他们根据项目的特性划分团队,每个团队都致力于特定的特性。除此之外,当你使用 git 时,它减少了合并和变基时发生冲突的可能性。