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

2015-09-15 09:35:06 +08:00
 mofet

最近在做 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 ,文件目录不一一对应简单一点更好?

4797 次点击
所在节点    iOS
20 条回复
gssdromen
2015-09-15 09:50:14 +08:00
我们这里一般按功能模块分,每个功能模块里再按第一种分文件夹
amon
2015-09-15 09:55:18 +08:00
这个是经验的问题,项目越做越多,踩了坑就懂了。

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

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

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

以我待过的几个大型项目(二十多人)来看,目录结构结合了上面这两种比较好,比如:
/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
2015-09-15 10:19:33 +08:00
ibremn
2015-09-15 10:20:21 +08:00
还有。。李明杰之类的视频你们也看?代码写的那副德行竟然还找人去加星,搞的 Github 乌烟瘴气的。。简直了。。
mofet
2015-09-15 10:24:58 +08:00
@amon @Obelly 谢谢提醒,本来是这样打算的, Xcode 的 folder 麻烦一点,除了资源文件准备全都用 group ,和 Finder 目录自觉对应。我去试了下 synx ,好像确实可用,目录同步的问题可以省了。
mofet
2015-09-15 10:35:40 +08:00
@ibremn 我们这个项目不算很大,因为 Model 这部分非常通用的原因,起先是打算第一种的。看来在 Controller 按功能分割一下也是有必要的。
mofet
2015-09-15 10:38:15 +08:00
@ibremn 我没看过李明杰= = ||| 队友说起他的时候,我脑海里就想起那种带口音进度极慢的教学视频,不敢信任啊
NovemberEleven
2015-09-15 10:53:15 +08:00
个人更倾向按功能模块分组,
fdq541788
2015-09-15 11:09:28 +08:00
还是喜欢先二后一~ 模块->mvc
chisj
2015-09-15 11:32:15 +08:00
多人开发还是按功能划分好一点,另外李明杰是谁?我怎么从来没听过,讲得比 WWDC 好吗?
loveuqian
2015-09-15 11:47:45 +08:00
额。。怎么都在喷 MJ
xummer
2015-09-15 15:30:33 +08:00
@ibremn 很好奇微信的目录结构是怎么弄出来的?
HancockXu
2015-09-15 17:20:52 +08:00
按模块划分,然后用 cocoapods 建私有 pod 。
ltl007131
2015-09-15 17:58:28 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/220751

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX