V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mofet
V2EX  ›  iOS

请教一下各位做 iOS 项目,项目和文件结构是怎么样的?

  •  
  •   mofet · 2015-09-15 09:35:06 +08:00 · 4589 次点击
    这是一个创建于 3146 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在做 iOS 开发,成员之间对 iOS 的项目结构意见不太统一,想问问 V2 上的各位一般都是怎么做的?项目是 MVVM ,按照组里老成员的习惯(包括一些刚转 iOS 的 Java 和 Android 程序员),原计划的项目结构是按照层次划分,比如:
    src
    |- Storyboard
    |- Controllers
    |- ViewModels
    |- Models
    |- Util
    |- Categories

    但是有新成员提出 iOS 应该用功能模块来划分。据说这是受李明杰之类的 iOS 教程视频影响起来的?由于我们的 iOS 经验不足,现在不知道主流的 iOS 项目都是怎么设计的?这种想法大概是这样:
    classes
    |- home
    |- comments
    |- reposts
    |- favorites

    另外 Xcode 里使用 Group 好还是直接创建 folder 和文件系统一一对应?原本的想法是如果类似 java 的包形式, Xcode 和文件结构完全对应也挺正常。不过如果用功能来区分的话,考虑到之后的需求变更可能挪动文件还要 git/svn ,是不是单纯用 group ,文件目录不一一对应简单一点更好?

    20 条回复    2015-09-15 17:58:28 +08:00
    gssdromen
        1
    gssdromen  
       2015-09-15 09:50:14 +08:00
    我们这里一般按功能模块分,每个功能模块里再按第一种分文件夹
    amon
        2
    amon  
       2015-09-15 09:55:18 +08:00   ❤️ 1
    这个是经验的问题,项目越做越多,踩了坑就懂了。

    关于目录划分,两者各有利弊,推荐的方法是功能较冗余耦合度高的项目采用按层次分,功能模块较清晰耦合度低的项目采用按模块分。

    关于 folder 和 group , group 是 Xcode 的虚拟目录, folder 是物理目录。要先建议物理目录,再同步建议虚拟目录。不然去看物理路径看一团糟, git 上根本不能直视怎么办。
    alienjunx
        3
    alienjunx  
       2015-09-15 09:55:53 +08:00
    两者结合的,我是先 mvc 然后再分功能,大到小的概念。
    alienjunx
        4
    alienjunx  
       2015-09-15 09:58:31 +08:00
    文件夹和 group 必须要一一对应,用过就知道了,虚拟目录真的没法看,一个简洁的文件结构太重要了。
    Obelly
        5
    Obelly  
       2015-09-15 10:03:00 +08:00   ❤️ 1
    @alienjunx @amon synx 有奇效
    UI ,存储,业务逻辑,公用组件,配置文件等分别存放。
    涉及复杂页面的话,子页面亦单独存放。
    WildCat
        6
    WildCat  
       2015-09-15 10:03:38 +08:00 via iPhone
    可参考 WordPress-iOS
    Elethom
        7
    Elethom  
       2015-09-15 10:05:08 +08:00   ❤️ 1
    Should be moved to /go/idev .

    網路上有大把的一手資源還去看國內視頻教程的人自己水平大概也不怎麼行,何況作者本身在 GitHub 上就有項目,代碼質量是什麼樣子自己看不出來麼。
    ibremn
        8
    ibremn  
       2015-09-15 10:18:22 +08:00   ❤️ 3
    第一种更偏向于小项目 /个人项目,结构条例清晰。但是一旦项目膨胀起来,这种结构在查找和定位文件时就非常痛苦了。

    以我待过的几个大型项目(二十多人)来看,目录结构结合了上面这两种比较好,比如:
    /Vender 第三方库
    /Foundation 基础类库,业务无关
    /Base 业务通用类库,比如各种自定义控件、富文本、网络、 Model 、 Persistence 、 Helper 、等等
    /Home
    /Model
    /View
    /Controller
    /...
    /Chat
    /Model
    /View
    /Controller
    /...
    /Explore
    /Profile
    /...

    如果你们 PK 不过,可以把微信的目录结构搬出来: https://github.com/zcsoft/MMStructure/blob/master/DirStructureSortu.txt

    目录结构最好用 Folder ,然后拖到 Xcode 里形成 Group ,这样不论在 Xcode 里还是在文件目录里处理文件都会比较方便(尤其是添加删除文件出错的时候)。
    rayzworld
        9
    rayzworld  
       2015-09-15 10:19:33 +08:00   ❤️ 1
    ibremn
        10
    ibremn  
       2015-09-15 10:20:21 +08:00
    还有。。李明杰之类的视频你们也看?代码写的那副德行竟然还找人去加星,搞的 Github 乌烟瘴气的。。简直了。。
    mofet
        11
    mofet  
    OP
       2015-09-15 10:24:58 +08:00
    @amon @Obelly 谢谢提醒,本来是这样打算的, Xcode 的 folder 麻烦一点,除了资源文件准备全都用 group ,和 Finder 目录自觉对应。我去试了下 synx ,好像确实可用,目录同步的问题可以省了。
    mofet
        12
    mofet  
    OP
       2015-09-15 10:35:40 +08:00
    @ibremn 我们这个项目不算很大,因为 Model 这部分非常通用的原因,起先是打算第一种的。看来在 Controller 按功能分割一下也是有必要的。
    mofet
        13
    mofet  
    OP
       2015-09-15 10:38:15 +08:00
    @ibremn 我没看过李明杰= = ||| 队友说起他的时候,我脑海里就想起那种带口音进度极慢的教学视频,不敢信任啊
    NovemberEleven
        14
    NovemberEleven  
       2015-09-15 10:53:15 +08:00
    个人更倾向按功能模块分组,
    fdq541788
        15
    fdq541788  
       2015-09-15 11:09:28 +08:00
    还是喜欢先二后一~ 模块->mvc
    chisj
        16
    chisj  
       2015-09-15 11:32:15 +08:00
    多人开发还是按功能划分好一点,另外李明杰是谁?我怎么从来没听过,讲得比 WWDC 好吗?
    loveuqian
        17
    loveuqian  
       2015-09-15 11:47:45 +08:00
    额。。怎么都在喷 MJ
    xummer
        18
    xummer  
       2015-09-15 15:30:33 +08:00
    @ibremn 很好奇微信的目录结构是怎么弄出来的?
    HancockXu
        19
    HancockXu  
       2015-09-15 17:20:52 +08:00
    按模块划分,然后用 cocoapods 建私有 pod 。
    ltl007131
        20
    ltl007131  
       2015-09-15 17:58:28 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3565 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 04:44 · PVG 12:44 · LAX 21:44 · JFK 00:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.