网易首页 > 网易号 > 正文 申请入驻

架构设计:复用是邪恶的

0
分享至

  在系统设计和写代码的过程中,我经常会听到「复用」这个词,以「复用」为目的来设计技术,业务,组织架构。例如:

  抽象出一个类,函数,UI 组件,用于不同的场景

  抽象出一个微服务,越细越好,这样可以灵活的组合

  抽象出一个业务中台,沉淀各种基础业务功能,供全公司使用

  组织(管理)架构中,抽象出一个职能竖井(后端,前端,QA,财务),被不同的产品使用

  产品设计中要完成一个性能功能,发现跟之前一个功能相似,就复用之前的功能设计,改改继续用

  为什么我们喜欢复用呢?

  主要目的:既然一部分功能已经存在,为什么还要自己造呢?直接拿来用,这样我可以做得更少,所以能够提升个人的生产效率。

  接受的教育:一直以来的教育,大部分工程师都学习过 DRY principle;《设计模式》的的英文书名就是 《可复用面向对象软件的基础》,都在强调复用。

  编程习惯:在面向对象语言里,工程师习惯了继承,而继承对于大部分人来说的目的就是复用

  认为复用可以提高效率的推理逻辑是怎样的?

  如果我们要写一个系统的所有代码,我们需要写大量的代码。

  如果我们能从其他地方重用一些以前写过的代码,我们就能写更少的代码。

  我们能重用的代码越多,我们写的代码就越少。

  我们写的代码越少,我们就会越早完成系统!

  这样的推理逻辑是存在如下误区:

  所有的代码(功能)需要相同的时间来写

  写代码是完成系统的最主要工作

  如果你要写得代码依赖很多其他的「复用」模块,你就要去理解不同的「复用」模块提供的接口,很多时候只看文档都不行;如果「复用模块」的接口不是正好是适用你的场景,你就必须在讲究使用接口和对方排期之间进行选择。

  此外对于如何抽象出一个公共业务模块,大部分人都没什么标准,公共业务模块的负责人成了业务的外包,效率更低。

  另一点是任何维护生产环境系统的人都知道写代码只是整个工作中一小步,而且是确定性最高的一步,之后维护才是最占用时间的。我们需要不断地进行调试,部署,再调试,部署。一个用于很多依赖的模块相对依赖少的模块做这些工作的难度是高很多的。

  你说复用带来了这么多问题,那我们平时使用各种框架,基础算法库都要自己写一份吗?

  肯定不需要自己再写一份,我们平时会使用各种编程语言(Java,Go),框架,库。我们使用这些没有任何问题,因为这是共识和标准,他们是足够「通用,一般化」,并不是为了某个业务或者某个公司定制的。先有「共识,标准」,再谈复用,绝对不是随意的拿过来用。

  那我设计系统时,尽量将我的设计通用化就好了(例如拆很多个 CRUD 的微服务),这样就能更多的进行复用,提高生产效率对吗?

  复用不是系统要追求的目标。很多人认为更多模块的「复用」,就可以做到像乐高一样快速搭建系统,但是很多复用并不是乐高,而是器官移植,不仅不能提高效率,要不断面对各种各样的排异反应,降低了速度和稳定性。很多创业公司快速发展时系统腐化的主要问题就出现在了强行复用上。强行复用的案例很常见,例如:

  上百个字段的数据表(例如订单表,数据表),不清楚哪个字段在哪个场景下有效

  根据名词来设计系统,出现业务中台,例如订单中台,电商中台,各部门之间不断地扯皮

  出来无数个小的微服务,然后搞个统一的业务编排调度层(所谓的 gateaway)来处理业务,可能还抽象 DSL;上线十分复杂,需要发布 N 各模块;调度模块是系统大单点,稳定性迭代速度都是问题

  如果有一个好的设计,我们需要谨记《Hints for Computer System Design》中的「Use a good idea again instead of generalizing it. A specialized implementation of the idea may be much more effective than a general one.」

  那系统设计好的标准是什么?衡量的维度有优先级吗?

  两个评价标准自治性和一致性:

  自治性:受其他模块的影响程度,观测模块的接口是否稳定。可以使用AutonomyMetrics[1] 进行衡量

  一致性:应该使用一个模块的地方使用一个模块的程度,也可以衡量是否过早,过度抽象了。可以使用 ConsistencyMetrics[2]

  在业务层次是否要从多个业务模块中抽象出一个底层模块,可以通过多个业务模块的这部分公共逻辑部分是否要一起进行改变进行判断,如果不是需要一起变化的就不要抽象出公共模块。

  根据个人经验如果你在要从各个业务模块进行抽象出一个模块保持一致与保持在模块保持自治之间犹豫时,要毫不犹豫优先选择「自治」。

  总结

  大部分情况下系统的核心复杂度不会减少, 只是转移;不会因为所有代码一个人写,会比分成两个人写更快,分工是应该且必须的。但是请注意的是:

  不要为了复用随意通用化,抽象化,复用不是目的。如果要通用化就拿ConsistencyMetrics[2] 来判断是否是抽象合理的。

  不要随意复用其他的模块,自治优先,用 AutonomyMetrics[1] 衡量;如果要复用一定要确保共识和标准优先,形不成共识和标准就不用复用。

  https://autonomy.design/Part1/AutonomyMetrics.html

  https://autonomy.design/Part1/ConsistencyMetrics.html

  https://zhuanlan.zhihu.com/p/356202989

  https://udidahan.com/2009/06/07/the-fallacy-of-reuse/

  https://zhuanlan.zhihu.com/p/138145081

  https://zhuanlan.zhihu.com/p/410049005

  免责声明:

  本公众号部分分享的资料来自网络收集和整理,所有文字和图片版权归属于原作者所有,且仅代表作者个人观点,与本公众号无关,文章仅供读者学习交流使用,并请自行核实相关内容,如文章内容涉及侵权,请联系后台管理员删除。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
俄媒:“普里戈任”惊现中非乍得共和国,他还活着?

俄媒:“普里戈任”惊现中非乍得共和国,他还活着?

音乐时光的娱乐
2024-05-24 18:59:03
麦当劳哭了!一张工作人员的图,刷爆华人社媒和外网!“好恶心!”

麦当劳哭了!一张工作人员的图,刷爆华人社媒和外网!“好恶心!”

澳洲红领巾
2024-05-24 12:38:57
哈斯勒姆:仇恨是我打球的动力 但我实在找不到讨厌姚明的理由

哈斯勒姆:仇恨是我打球的动力 但我实在找不到讨厌姚明的理由

直播吧
2024-05-24 21:20:13
“台空军”退役副司令:若两岸开战就在福建打,别拿台湾当主战场

“台空军”退役副司令:若两岸开战就在福建打,别拿台湾当主战场

boss外传
2024-03-19 19:05:03
震惊!李雨禅再次实名举报郭有才,北京12345回应:会核实交办…

震惊!李雨禅再次实名举报郭有才,北京12345回应:会核实交办…

火山诗话
2024-05-22 19:29:58
乌军夺回哈尔科夫地区控制权,俄罗斯部署非洲军团增援哈尔科夫

乌军夺回哈尔科夫地区控制权,俄罗斯部署非洲军团增援哈尔科夫

今观天下
2024-05-25 08:57:31
按摩时,足浴技师问你“之前来过么?”可能在暗示你,别不当回事

按摩时,足浴技师问你“之前来过么?”可能在暗示你,别不当回事

毒舌混知所
2024-03-30 07:50:03
台湾艺人纷纷力挺祖国统一!田馥甄惹怒粉丝大爆料!

台湾艺人纷纷力挺祖国统一!田馥甄惹怒粉丝大爆料!

小毅讲历史
2024-05-24 18:59:17
吃西瓜等于反犹?美国是越来越离谱了

吃西瓜等于反犹?美国是越来越离谱了

怪口历史的K先生
2024-05-22 13:16:21
日本这下沉默了!他们远远低估了,核污水处理带来的连锁反应

日本这下沉默了!他们远远低估了,核污水处理带来的连锁反应

阿莱美食汇
2024-05-24 12:11:12
退休后加入了日籍就不能享有中国社保了?老人怒吼:凭什么?

退休后加入了日籍就不能享有中国社保了?老人怒吼:凭什么?

鲁八两
2024-05-22 13:26:12
高中毕业后在省城洗车店打工,老板娘勾引我后,老板死了

高中毕业后在省城洗车店打工,老板娘勾引我后,老板死了

羽怡文学工作室
2024-05-22 16:19:25
侯友宜正式向大陆摊牌:将统一模式强加于台湾人,主流民意不接受

侯友宜正式向大陆摊牌:将统一模式强加于台湾人,主流民意不接受

小乐讲故事
2023-05-21 07:22:28
大小S台娱口碑暴跌!赵正平公开内涵,吴宗宪跟张兰直播倒油大S!

大小S台娱口碑暴跌!赵正平公开内涵,吴宗宪跟张兰直播倒油大S!

小咪侃娱圈
2024-05-23 11:48:50
金晨的尴尬折射多少演员的无奈:时代抛弃你时,连招呼都不会打

金晨的尴尬折射多少演员的无奈:时代抛弃你时,连招呼都不会打

深海鱿娱
2024-05-23 20:22:28
马斯克睡了好友华裔妻再被实锤!两人K粉一夜缠绵,惊人细节曝光

马斯克睡了好友华裔妻再被实锤!两人K粉一夜缠绵,惊人细节曝光

听风听你
2024-05-24 10:59:55
正式官宣!刘传兴完成签约,携手CBA名帅,全力冲击总冠军

正式官宣!刘传兴完成签约,携手CBA名帅,全力冲击总冠军

体坛瞎白话
2024-05-24 15:24:12
直击“抓嫖新科技”,看完后你还敢去特殊场所玩吗?

直击“抓嫖新科技”,看完后你还敢去特殊场所玩吗?

华庭讲美食
2024-05-22 07:10:21
外贸熄火,内需不足,中国经济面临的问题,究竟是谁的责任?

外贸熄火,内需不足,中国经济面临的问题,究竟是谁的责任?

庞明说财经
2024-05-22 22:15:23
《歌手2024》打败那英的亚当有什么来头

《歌手2024》打败那英的亚当有什么来头

红星新闻
2024-05-24 22:40:08
2024-05-25 10:38:44
IT架构师联盟
IT架构师联盟
IT架构实战分享
684文章数 7651关注度
往期回顾 全部

科技要闻

刘强东:从来不拼搏的人 不是我的兄弟

头条要闻

25户业主自筹800万资金 准备在楼房原址重建一栋新楼

头条要闻

25户业主自筹800万资金 准备在楼房原址重建一栋新楼

体育要闻

哈维下课后首发声:永爱巴萨 带着自豪离开

娱乐要闻

霍启仁求婚成功,郭晶晶要有妯娌了

财经要闻

白重恩解读中国经济的3个关键问题

汽车要闻

宝马M品牌上新 2024年在华推出近10款高性能车型

态度原创

房产
时尚
艺术
游戏
本地

房产要闻

超高性价比!仁恒长天云汀价格曝光!近500套房源一次砸出!

学穿衣还得看日本主妇,不管衬衫还是短袖都高级,穿出了冻龄感

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

《博德3》PS5实体豪华版延期发售:遇到了生产问题

本地新闻

2024沈阳皇姑第二届半程马拉松

无障碍浏览 进入关怀版