阅读 949

iOS开发经验总结 | 掘金征文

掘友们,大家好呀,我是iOS开发程序员。有一点开发经验总结了一下,分享出来。大家有砖轻拍哈
开发程序员左右不了PRD,也就是正确的程序,只能尽力做到程序运行正确。
程序正确程序运行正确 更重要,但我们只能做好分内事了...然后期待 程序正确

一、模块化开发,麻雀虽小


1、怎么样算一个模块?按功能划分,内部有一定逻辑、对外有清晰的输入输出

按功能划分,举个栗子:商品详情页面里的商品列表就可以看做一个模块
1、有独立的接口,便于Mock数据,耦合很低,便于复用
2、包含一定交互及状态的改变维持等,如商品类别分组及展开收起、预订跳转等

2、怎么开始?从Mock入口和数据开始

Mock入口和数据可以快速测试,节约大量时间

有些页面比较深,二级、三级、四级都有可能。
如果运行启动从首页开始、频道页或搜索、详情、填单...... 想想无数次重复这个过程,中间可能遇到接口不通很慢、服务不稳定等各种问题。
Mock入口和数据极大的提高了开发及调试效率

3、开发顺序?根据需求从主体需求做起

先做主干再填枝叶

需求有很多点,找出其中主干把框架搭起来,再不断的测试、调试、完善 根据需求的流程的不同分支条件,模拟出对应的数据。必要时可以增加多个测试入口。 当然测试运行时条件分支也可以动态切换。利用lldb、条件断点、Charles的Map Local功能等等更方便的实现

4、结束?对接线上接口,测试网络失败等异常情况

Mock数据测试各种情况很方便,但是现实情况太复杂了。有各种异常情况、网络异常、接口数据异常、内存警告、循环引用、机型适配、系统版本适配、滚动卡顿等等。
细细的测试尽早发现问题。

二、认真阅读产品需求文档,尽量让程序更灵活


越来越体会到阅读理解能力的重要性。
同样的文档有的人会漏掉一些需求,直到认真的测试同学提出bug,回头一看才恍然大悟。
认真的同学经常发现一些可以优化的或有问题的点,积极沟通

整理出来所有情况,一一列出,然后思考哪些是客户端的?哪些又是接口提供的?
尽可能将一些控制流程的变量、开关等放在接口里。
方便后续需求修改后,通过接口兼容老版本。

举个栗子:文档里写的是商品大于3个显示更多按钮。那么这个3就应该放在服务端。
再比如文档写支付方式只显示前3个,之后的支付方式收起来并显示更多。这种情况可以把3放在接口,也可以在支付方式上增加显示与隐藏的字段。
具体方式可以和产品和接口的同学一起商量。

{
    "maxShowCount":3
} 
或者如下更灵活,再加上后台配置就更好了
{
    {
        "alipay":"...",
        "show": true    
    },
    {
        "bankpay":"...",
        "show": false    
    }
}
复制代码

三、View 和 Model需要知道的越纯粹越好


比如左边一个Label 右边一个Label,那View只需要一个Model 如下

class Model
    NSAttributedString *left
    NSAttributedString *right
end
复制代码

不要写成类似Title 和Price等具体的Value内容相关的

总结

1、以后只要左边和右边有Label的View 都可以用这个View 和Model
2、NSAttributedString使View 和Model的界限不那么清晰了。显示的样式有些可以写在Model里。改起来更容易也使View更通用
3、合理运用RAC的(注意循环引用的问题 )简化了Model里的数据改变不是由于用户操作引起的情况,便于触发View的状态改变
View的改变也比较方便的通过RAC改变到Model

四、改造数据

很多情况下 接口给的数据结构不适合直接拿来用。
可以增加构造数据方法,来改造数据。比如增加记录状态的属性,根据需求重新组装等

Model可以多记录一些

比如有一个title字段,显示的时候需要设置font size color等。那改造成一个属性字符串更好用 不建议把font size color等写死在view上。感觉写在Model里比较合理

定义一些防错解析。比如某些顺序是写死的,可以增加一个字段解析。防止需要变化的时候改不了

五、报错了? 不要慌,不要着急问,不盲目乱尝试

仔细阅读报错内容。认真分析。良好的设计都是会在报错是提供详细的信息。
运行报错仔细看Xcode控制台日志
编译报错仔细看编译日志,一般会把错误写得清清楚楚
实在不行注释代码。利用git版本库回退代码 都是好办法

六、按照正常的规范来

把代码写在改写的地方 避免奇怪的问题。

比如
1、不要修改cell的frame,别笑 真有这么干的
2、cell要按照规矩写复用id。不要直接返回retain的cell。在说收到内存警告时你会发现咋少了点东西?!
3、to be continue...


掘金征文 | 2020 与我的年中总结 征文活动正在进行中......