谈项目构建与维护
多去周边的世界看看。 -----Yee
链接
第一阶段
- 禁止使用xib.
- 第三方service SDK禁止直接使用(更换的时候,代码如果太分散),必须构建一个中间层。
- 图片名称不可出现中文。
- 非公共、自行使用的组件,禁止编写宏。(真的会存在冲突)
- 禁止编写对象或者Class的宏定义。比如:(
#define YUInstance [YUClass manager]
)。 - 依赖的frameWork必须修改源码时,需要在frameWork的加上当前项目的前缀。(为了防止与其他不可见SDK存在相同定义)
- 禁止在逻辑代码中用宏去判断下一步该怎么做,(因为这个宏大多数情况下会使用多次,为何不维护一个全局变量。)
第二阶段
- NSDictionary与NSArray使用时必须判断空或者转成model。
- UITableViewCell中禁止使用KVO,应该由持有tableView的父UIView或更高级的视图(也可能为viewMdel)。
- UITableViewCell中禁止去配置倒计时NSTimer,需要由更上层的组件去维护。
- UITableViewCell的
setSelected
方法牵涉到逻辑处理时,禁止使用。(逻辑处理应该由上层下发) - UITableView与UICollectionView中禁止将cell设置为对象,当这个cell时考虑使用,其他情况不予使用。
- 代码合并禁止跨版本合并(不能有侥幸心理,羚萌直播代码丢失了很多次了)
- UIView、UIViewController、viewModel等Class的关键方法,如
init
、initWithFrame
、ViewWillAppear
静止编写逻辑代码,需要分发出来另起一个新方法。
第三阶段
- 子对象禁止去操作父对象其他的子对象,必须借助父对象这个中间层。
- block静止多层嵌套,需要下发出去。(以防止条件语句过多,导致逻辑层混乱,后序人员无法维护)
- 懒加载方法中禁止
setBlock
等操作。(理由同上) - 反向传值禁止使用广播消息。(到底是谁接收/谁发送无从排查)
第四阶段
- dealloc方法中要小心使用了点语法,以免对象无法销毁。
- 组件需要自定义万能的初始化方法,参数为空时需要用nullable等关键字表明。
第五阶段
- 更改以往版本功能,需告知测试人员,以防止功能丢失,代码丢失,线上问题等。(羚萌直播项目此类问题经常出现)。
- 发版前一天出现问题,应该推辞发版。(这个需要多方面配合,羚萌直播经常出现此类问题,正式部署线上时间问题居多)
第六阶段
- MVC、MVVM没有好坏,关键是如何处理组件的逻辑,而代码还能清晰明了。
- tableView优化问题可做,无论是缓存height,取消不见的图片下载、圆角以图片更换,甚至于更换组件用Texture替换。需要考虑的是影响当前项目的瓶颈有那些,然后在开始动手。
- 拦截常见的错误(NSArray越界,Map空,发生消息转发)
- 启动时间优化(除了在程序启动后再加载非必须的组件,延后SDK的初始化,子线程预先加载必要图片),能否借助fishhook在dylb装载的时候优化。
- 安装包的大小问题(无用代码,无用资源图片,减少SDK的使用)。