拆分代码与泛型

递减,用尽一切潜力的秘密。


社会的发展,人们对软件有了越来越多的期待。为了更快更好的把APP开发出来,开发者们越来越重视代码的可测试和可复用。开发者们把优良实践经验总结成各种设计模式。而软件架构的设计与开发,也是以此为根本出发点。

我们知道,MVVM也好,VIPER也罢,目的只有一个,把VC的代码分拆,使代码更容易测试和复用。

那么,抛开各种先进设计不谈,我们来聊聊代码分拆的基本做法是怎样的。

类内的代码拆分

1、把一个方法里的部分代码移到新建方法中。

2、根据所移代码,在方法名里补充需要的参数。

3、在代码原来的地方引用新建的方法。

至此,完成了文件内的代码拆分。后面我们尝试把方法移出文件。

代码分离到新类

4、新建一个类,把之前新建的方法移到新类中,在头文件把方法名加上作为对外接口。

5、在旧类中创建一个新类的对象。

6、把旧类中引用新方法的地方里的"self",改为新类对象。

至此,完成了代码从一个类移动到另一个类。

原始的“换类不改类”

如果我们希望修改方法实现的功能,怎么办?

按传统做法,在旧类里直接改。把代码从旧类移到新类后,只需要修改新类,旧类无需修改。这在某种程度上实现了模块化。

但是,不管在旧类上改代码,还是在新类上改代码,只要改变原类代码,就破坏了每个类原有的“单一职责”。随时业务需求的变化,一个类不断修改代码,这个类的“职责”也就一直在变化。

我们希望每个类都有它自身的“单一职责”,在我们需要其它“职责”时,创建新的类,而不是去破坏旧的类,使其身兼数职或职责不断在变化。

于是,新的需求就应此而生:通过换类来实现功能的修改,而不是改类。

我们先创建第二新类,提供接口,并实现功能的修改。在旧类里创建第二新类对象。然后,把调用第一新类方法的地方,把第一新类对象改为第二新类对象。

至此,完成了最原始的“换类不改类”。

泛型,实现类职责的永久单一

随着功能的扩展,如果继续沿用上面的设计,我们在不得不在旧类上创建大量的新类对象,同时还得把旧类中引用的新类对象方法的地方一一找出并修改。

为了彻底做到“不修改旧类代码即可修改功能”的设计目标,我们对代码的设计进一步优化。

7、创建一个协议。

8、在旧类中创建一个协议对象 (id<protocol>)。把旧类中调用新类方法的地方全部改为调用协议对象方法。

9、创建一个符合协议的新类。在协议新类的协议方法里完成旧类功能的实现。

10、在旧类实例化的地方,把协议新类实例化,赋给旧类的协议对象。

11、把旧类引用新类对象方法的地方,改为引用协议对象方法。

12、以后需求变化,修改功能,只需要把第二协议新类实例化后,赋给旧类的协议对象就可以。其它任何地方的代码全都无需改变。

这样就可以把一个类的变化部分,彻底分离出来,让一个类的职责永保单一。

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


递减原则

昨天,发布了《从零开始学iOS开发的15条建议》,最开始只是为了避免有人重复问我“怎么自学iOS开发”这个问题。

今天,我完成了6组共300个仰卧起坐。在健身的时候,因为越做到后面的组别时,保持每组50个越来越困难,使得不敢轻易开始新的一组。那么,我少做一组就少做50个。如果我没有一组做50个的规则,那么我将可以非常轻松地多做10个。

由此可见,“定量思维”会极大的降低人的潜力。“倒金字塔”或“递减”思维,更有利于把潜力榨光。

《15条建议》里,项目、源码、书籍、博客、文档、视频、社区、搜索、Q群,这样由难而易的学习顺序,明显就是一种“递减思维”。递减式的学习顺序可以适合所有人。任何人按着这个顺序来,永远有事可做。而递增式的学习顺序则会让有积累的人感到超级无聊。

所以我应该改变我的健身组合,一开始尽可能地多做,然后每次根据当下的情况递减,理想情况是递减到1个都做不下。

同样的,不管我做任何事,都应该用“递减原则”代替“递增原则”,让自己和世界的潜力得到最大的互动。

我们对待儿子的方式,就是递减式的。从来不会只在对应年龄段给儿子找书看,而是先把书丢给他,如果他看得吃力或不感兴趣,再换一本低一年龄段的。

我将通过“递减原则”全面改造我现在第138版的人生系统:《疯子一般深入系统》。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,386评论 25 707
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • 写在最前面: 这是我读这本书的第一遍,目前暂定为1.0版本吧。很多地方都还没有很好的理解透彻,只是理解到了一点皮毛...
    LaiYoung_阅读 1,805评论 4 18
  • 其实在真正经历理想幻灭之前,我并不知道那种心碎的感觉。还记得,在小学时,受老师和那些名人事迹的影响,一直想做一位伟...
    梦竹星空阅读 504评论 0 1
  • 人力资源部2017年总体规划 注:因公司和业务部门2017年的具体计划未完全确定,所以人力资源部的规划为总体规划,...
    张铁译阅读 836评论 1 5