Xcode项目组织结构的最佳实践是什么?

25
在提供代码示例的教程和示例中,有时我看到Xcode的项目导航器中的项目文件按MVC模式(“视图”,“控制器”,“模型”)组织成组,有时则按功能组织成组(例如,“登录”,“清单”)。
就iOS而言,苹果有任何约定/建议吗?哪种方法是最佳实践?

1
可能是如何构建iPhone XCode项目结构?的重复问题。 - Jaythaking
3个回答

39

开发人员以各种方式组织其团队、代码和文件。但我使用类似以下方式:

  • CoreData: 包含 DataModel 和 Entity 类。

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

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

  • Model: 为保存数据创建单例类(例如 AppModel - NSArray,NSDictionary,String 等)。Web 服务响应解析和存储数据也在此处完成。

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

  • View: 包含 storyboard、LaunchScreen.XIB 和 View 类。创建子文件夹 Cells - 包含 UITableViewCell、UICollectionViewCell 等。

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

这个结构来自另一个 Stack Overflow 帖子

以下内容可能对您有帮助:

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

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

  • 点击此处查看有关iOS项目架构的演示文稿。


  • 3
    第一个链接已经失效。 - saurabh
    很好的解释。 - Shahbaz Akram
    1
    我个人建议采用从《Clean Architecture》中的“叔叔鲍勃”(Uncle Bob)方法。因此,架构结构和命名应该表达业务领域,而不是你正在使用的技术细节、框架或模式。 - Ali Abbas
    如果我使用MVVM模式,我能把文件夹Controller视为ViewModel吗? - Memphis Meng
    这是一个糟糕的结构 - 要添加一个单一的功能,你需要打开所有的组/包。 - xxfast
    显示剩余2条评论

    16

    我创建了一个项目来演示我认为适用于小型或中型代码库的Xcode项目结构。您可以在这里找到它。

    以下是它的概述:

    • Source - 所有源代码
      • Account - 与账户相关的类(会话相关的类,账户逻辑等)
      • Application - 应用程序相关的类。应用代理,配置类等
      • Core Additions - 源自Apple类的扩展和子类
        • Utilities - 通用工具类。有用的扩展、格式化实用程序、便捷类等
        • 基于元素的文件夹 - UIView、UITableViewCell等的文件夹
      • Local Persistence - 本地持久化层。与本地数据库(realm、core data)的所有交互
        • Repositories - 所有模型相关的本地持久化逻辑
      • Constants - 所有常量。URL、字体、颜色、错误等
      • Models - 所有模型(服务器端实体的表示)。我们还会在此处放置任何对象映射逻辑
      • Modules - 在这里,我们可以按功能将应用程序的每个部分划分
        • 基于模块的文件夹 - 每个文件夹包含所有特定于模块的视图控制器、视图、委托和相关类
      • Networking - 应用程序的网络层(例如,负责与Web服务交互的类)
        • Services - 所有模型相关的Web逻辑
    • Storyboards - 包含所有故事板文件
    • Resources - 任何其他资源,如媒体、文档、本地化文件等

    11

    在项目中组织文件时,有两种最常用的方式。一种是按类型组织代码文件,另一种是按功能(特性)组织。

    按类型组织代码

    按类型组织代码适用于小型项目,但对于大型项目来说不是一个好的实践方法。

    这种方式是将所有的Models放在一个文件夹中,所有的Views放在另一个文件夹中,所有的Controllers放在第三个文件夹中等等。

    想象一下,如果您有大量由类型组织的文件和文件夹,当您在单个功能上工作时,您必须打开所有文件夹,这可能会让您感到困惑,而且当您浏览文件时,您可能会迷路很多次。

    类似于这样:

    • AppDelegate
    • View Controllers
      • Feature 1 VCs
      • Feature 2 VCs
      • Feature 3 VCs
    • Models
      • Feature 1 Models
      • Feature 2 Models
      • Feature 3 Models
    • Views
      • Feature 1 Views
      • Feature 2 Views
      • Feature 3 Views
    • Extensions
      • Feature 1 Extensions
      • Feature 2 Extensions
      • Feature 3 Extensions
    • Networking
    • Resources

    按功能(特性)组织代码

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

    因为通常团队会处理单个功能,并且他们仅专注于单个文件夹或文件组。他们不一定需要了解其他功能和文件。

    它看起来像这样:

    • AppDelegate
    • Features
      • Feature 1
        • View Controllers
        • Models
        • Views
        • Logic
      • Feature 2
        • View Controllers
        • Models
        • Views
        • Logic
    • Networking
      • Models
      • Logic
      • Extensions
    • Resources

    此外,要提到的是,这种实践和技术(按功能组织项目)由全球最大的公司实施。因此,他们按项目功能划分团队,每个团队都处理特定的功能。此外,在使用git时,合并和重置时降低了冲突的可能性。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接