刚工作时,代码写得不太好,师兄每次 CR 代码,总是会指着屏幕里的一坨代码说 “把它抽成一个类或函数”;“为什么呢?写在一起不是挺好的吗?” 我反问道;师兄老道地回答 “为了方便复用”;我仿佛若有所得,回到工位上把那些很长的代码全部抽象成了类和函数,感觉今天又有所成长。
复用是一个权衡
-
首先我需要知道可复用构件的存在 -
然后了解其中的结构和接口 -
对接模块的接口,并且测试无误 -
最后,只是会用还不够,如果线上出现,我必须保证自己对它有足够的了解,可以去排查该模块的问题
-
降低开发成本。通过整合业务中台已有的支付,供应链等能力,可以快速支撑新的业务上线。 -
提升软件产品的核心竞争力。已有的模块经过线上检验,其中积累了过去成功的经验, 并且未来还会继续积累,直接复用能够大大提升产品的竞争力。
深浅模块:成本角度谈复用
学习 SQL 相比学习 数据库实现 的成本,从相关书籍的厚度上就能看出一二,更何况它们的阅读难度相差也很大。
public void addParameter(List<String> params, String param) {params.add(param);}
《软件设计哲学》书中的配图,方块的宽度代表模块接口的复杂程度,深度代表功能的深刻程度,接口应该越简单越好,功能应该越深刻越好。深模块就是接口简单但是功能深刻的模块。
塑造产品的核心竞争力:效益角度谈复用
-
复用之前具有竞争力的技术模块,让过去的成功经验助力未来的产品成功 -
给用户提供一致的体验,考虑用户的使用习惯,降低学习成本
-
核心子域 -
特点:能够给公司带来核心竞争力的领域模块,拥有很高的复杂度和差异化价值 -
案例:比如滴滴的司机调度算法,支付宝的交易系统,钉钉的 IM 系统等等 -
复用策略:属于该子域的模块应该尽可能地复用, 将其竞争力也注入到其他产品,甚至投入精兵强将,提升其可扩展性,进一步拉开和竞争对手差距 -
支持子域 -
特点:用来支撑核心子域,但是不能带来竞争力 -
案例:比如运营管理系统,后台排查系统等等 -
复用策略:因为不能带来核心竞争力,不如各个业务根据自己需求,使用脚手架快速搭建,定制起来还更加方便 -
通用子域 -
特点:通用的业务或者技术问题领域, 比较复杂, 却不能给企业带来核心竞争力。好在一般有现成的解决方案,可以直接采购 -
案例:比如财务系统,可以直接采购用友,金蝶;分库分表,消息队列可以直接使用开源软件,或者购买云上解决方案 -
复用策略:尽可能复用,但是复用的目的与核心子域不同,主要是为了降低研发成本
世上只有一种英雄主义,就是在认清生活真相之后依然热爱生活。
参考资料
扫描二维码关注公众号,回复:
17398406 查看本文章
本文分享自微信公众号 - 大淘宝技术(AlibabaMTT)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
{{o.name}}
{{m.name}}