美文网首页iOS学习笔记iOS开发实用技术程序员
大道至简 | MVC+delegate,架构的方式,简单点

大道至简 | MVC+delegate,架构的方式,简单点

作者: Lol刀妹 | 来源:发表于2018-05-05 12:08 被阅读1072次
    曾经被复杂页面支配的恐怖,一去不复返

    写在前面

    MVC架构模式和delegate设计模式是我们最熟悉的架构模式和设计模式,正确运用它们可以轻而易举的将复杂页面打造得简洁明了、层次分明,下面就分享下我的一点心得。

    关于MVC

    起初,我想当然的认为MVC架构就是三个文件夹(model,view,controller),后来我读了唐巧的《被误解的MVC》,我才知道,MVC不仅可以有三个文件夹,还可以有四个文件夹、五个文件夹。。。

    其实说白了就是将业务逻辑细分然后从controller中抽离出来封装成单独的类。比如说数据请求,你可以单独建个类用于此页面的数据请求;还比如说数据缓存,你也可以单独建个类而不是直接写在controller中。

    把这些繁琐的业务逻辑代码分离出来,不仅controller更轻了,修改和维护也容易多了。

    当然,MVC并不是文件夹而是思想,既然是思想,那就只有在学习和交流中才能碰撞出火花。

    MVC+delegate在实际开发中的运用

    一,拿到UI图,我会将它拆分成几个模块:

    原图 拆分后

    二,将各个模块封装成自定义view:

    三,模块传值到controller一律用delegate:

    以主分类栏为例:

    主分类栏.h文件

    #import <UIKit/UIKit.h>
    
    @class CWFCategoryListMainCatView;
    
    @protocol CWFCategoryListMainCatViewDelegate <NSObject>
    
    // 主分类栏cell点击
    - (void)mainCatView:(CWFCategoryListMainCatView *)mainCatView clickedItemAtIndex:(NSInteger)index;
    
    @end
    
    @interface CWFCategoryListMainCatView : UIView
    
    @property (nonatomic, strong) NSMutableArray *dataArray;
    @property (nonatomic, weak) id <CWFCategoryListMainCatViewDelegate> delegate;
    
    @end
    

    传值到controller:

    - (void)mainCatView:(CWFCategoryListMainCatView *)mainCatView clickedItemAtIndex:(NSInteger)index {
        // 要执行的代码
        ....
    }
    

    四,整个controller的代码组织:

    优点

    1. 每个模块都对应一个delegate,你的任何操作都可以快速定位到相应代码。

    2. 低耦合,模块与模块之间无牵连。

    3. 代码组织非常清晰,任何人来接手都可以快速上手。实际上,可维护性永远是我们开发的重中之重,不管你用何种架构模式或设计模式,如果只是提高了效率却降低了代码可读性,那么,你就是在挖坑

    注意点

    1. 代理方法的命名务必规范,正确命名的代理方法可以很直观的告诉了我们“模块&操作”。
      官方命名推荐

    2. 不要看我这里用的delegate传值就想当然的认为我所有传值都用的delegate,实际上,貌似我也只有模块传值到controller的时候是用的delegate。对于嵌套的view传值到controller,比如view1->view2->controller,我一般会先用block传值到view2,再通过delegate传值到controller。

    总结

    曾经我也在controller中一口气写个一两千行代码,自己看自己的代码有时都觉得头痛。

    第一次进步是学会将controller中搭建UI的代码抽离出来转化成自定义view,也就是模块,从此以后,修改view的代码轻松多了;

    第二次进步是学会正确的写delegate,从此以后,定位操作到代码变得迅速,controller的代码组织也看起有模有样了;

    第三次进步是学会细分业务逻辑并从controller中抽离出来,从此以后,控制器不再臃肿,维护,so easy。至此,终于对自己的代码满意了。

    从公司的角度来讲,公司需要的是好的产品,而好的产品一定是好维护的。

    每只小菜鸟都终将成为一只更大的菜鸟。

    嘤嘤嘤~

    相关文章

      网友评论

        本文标题:大道至简 | MVC+delegate,架构的方式,简单点

        本文链接:https://www.haomeiwen.com/subject/zyssrftx.html