V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
cralison
V2EX  ›  iDev

依赖管理

  •  
  •   cralison · 2015-09-11 08:23:01 +08:00 · 1657 次点击
    这是一个创建于 3363 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不等心情,一点一点强行开始

    上面博文《解决“单接口,多类”架构设计的回调问题》的源码已经上传 Github :https://github.com/libinggen/CallBack
    本博文的源码也一直在 Github 上更新,已经写了好几天了:https://github.com/libinggen/DependencyManagement

    放 Github 的好处是,我不用浪费时间在文章里贴代码。而大家 Clone 下来就可以直接跑,直接帮我修改。

    依赖管理,是指在什么地方以什么形式引入外部代码。

    依赖管理为什么重要呢?
    因为,依赖在哪里,处理代码就会那里,而 bug 也就会出现在那里。
    于是,反过来,为了让 bug 集中,就需要让处理代码集中,也就需要管理好代码的依赖关系。

    依赖管理,有三个层面。
    1 、相同的代码,只出现在一个地方,也叫单一职责原则。
    2 、通过引用协议对象,让依赖关系中的组件更容易更换。
    3 、从逻辑上安排依赖关系,让依赖关系更容易被人理解。

    单一职责原则,是最基本的原则。它是代码模块化,设计模式的根本。
    协议对象引用,使得功能变更时,只需要在一个统一的地方做最少的修改。
    依赖逻辑关系,则主要是为了更方便人脑去理解代码之间的关系。

    我们从 ViewController 的代码开发,来思考代码依赖关系。

    最原始的做法,是把视图、数据模型、网络请求、本地存储、页面跳转五块代码全堆在 ViewController 上。这样一来, ViewController 因为放了太多代码,而变得臃肿,难以维护。

    怎么改善?

    第一步,把长方法里的代码,提出来成为短方法,在原来的长方法里调用抽解出来的短方法。我们得到了非常多的短方法。

    第二步,新建一个类,把短方法放到不同的类里。原类引用新类,调用新类方法完成功能。

    第三步,创建协议对象,在原类外部配置协议对象,原类调用协议方法完成功能。需求变化后,只要逻辑没变,只需要在外部更换协议对象的配置,不需要修改本类。

    第四步,根据逻辑关系管理协议对象的关系,进一步优化协议的依赖关系。
    比如,一份数据应该对应到一个模型,和获取数据的网络请求、本地存储,可以由一个模型管理协议对象统一管理。

    后记(下面以聊家常为主,没时间没兴趣的朋友请直接忽略):

    这篇文章写了好几文,一直在优化 Github 上的代码。
    而现在之所以可以成文,一来是代码优化到了一个阶段;二来是今早没有因为时间不够而一字写。从第一个字写下开始,后面的文章就写得非常快,顺理成章了。

    所以,任何事情,不要被它的庞大吓倒,一点一点敲,一点一点吃,只会越来越容易。

    CareiOS
        1
    CareiOS  
       2015-09-11 09:23:29 +08:00
    支持,学习到了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5553 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 07:50 · PVG 15:50 · LAX 23:50 · JFK 02:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.