【问题标题】:Best practice for an Xcode project groups structure?Xcode 项目组结构的最佳实践?
【发布时间】:2017-02-18 03:13:36
【问题描述】:

在提供代码示例的教程和示例中,有时我会看到 Xcode 的项目导航器中的项目文件按照 MVC 模式(“视图”、“控制器”、“模型”)按组排列,而其他时候它们是按功能分组(例如“登录”、“检查表”)。

关于 iOS,Apple 对此有何约定/建议? 哪个应该是最佳做法?

【问题讨论】:

标签: ios xcode file directory project-structure


【解决方案1】:

开发人员以多种方式组织他们的组、代码和文件。但我使用如下内容:

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

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

  • Helper:包含第三方类/框架(例如 SWRevealController)+ 桥接类(例如基于 Swift 的项目中的 Obj C 类)

  • Model:制作一个用于保存数据的单例类(例如AppModel - NSArray、NSDictionary、String 等)。 Web Service Response 解析和存储数据也在这里完成。

  • 服务:包含 Web 服务进程(例如登录验证、HTTP 请求/响应)

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

  • Controller:包含与UIElements相关的逻辑或代码(例如UIButton的引用+点击动作)如果使用MVVM,可以用ViewModel代替。

这个结构来自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

【讨论】:

  • 第一个链接失效了
  • 很好的解释。
  • 我个人建议使用来自干净架构的 Uncle bob 方法。因此,结构和名称应该表达业务领域,而不是您正在使用的技术细节和框架或模式。
  • 如果我使用 MVVM 模式,我可以将文件夹 Controller 视为 ViewModel 吗?
【解决方案2】:

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

这是它的概要:

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

【讨论】:

    【解决方案3】:

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

    按类型组织代码

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

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

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

    类似这样的:

    • AppDelegate
    • 视图控制器
      • 功能 1 VC
      • 功能 2 VC
      • 特征 3 VC
    • 型号
      • 功能 1 型号
      • 功能 2 模型
      • 特征 3 模型
    • 查看次数
      • 功能 1 视图
      • 功能 2 视图
      • 功能 3 视图
    • 扩展
      • 功能 1 扩展
      • 功能 2 扩展
      • 功能 3 扩展
    • 网络
    • 资源

    按功能(意图)组织代码

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

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

    看起来像这样:

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

    另外,值得一提的是,这种做法和技术(按功能组织项目)已由全球最大的公司实施。因此,他们根据项目的特性划分团队,每个团队都致力于特定的特性。除此之外,当您使用git 时,它可以减少合并和变基时发生冲突的机会。

    【讨论】:

      猜你喜欢
      • 2014-06-26
      • 2010-10-04
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 2016-06-18
      相关资源
      最近更新 更多