组件耦合

通读完《架构整洁之道》全书,回过头再来写总结和感想,真不是一件容易的事。之前在《禅与摩托车维修艺术再探》里我说,写这类文字是一个合上书又翻开书的过程,合上书回想主要收获,翻开书做有重点的二次阅读。这篇就是翻开书。

组件耦合

这一章节除了已经广泛应用的每日构建外,主要讲了三个原则:无依赖环原则、稳定依赖原则、稳定抽象原则

到这里我想到这些原则、规则、law与程序员之间的关系。作为一名程序员,这些原则应该要内化掉,了解原则之后至少要指导一次编码实践,在实际需求中这些原则应该共同组成程序员的良质(《禅与摩托车维修艺术》),指导程序员追求更加有序、节省人力的设计方法。作为一名TL、SE或者架构师,我逐渐意识到,这些原则是需要有意识地收集、整理、举证、实践的,因为这类角色经常需要去给别人讲东西,经常需要推动一些改革,工作重点中有一大部分都是与人打交道,已经不止是应用,更多地变成了一本行走的书,我想架构师团队应该至少把不同方面不同角度的原则整理出来,将零碎的知识点归纳出来,作为指导设计和健康度评估的checklist。

组件依赖关系图中不应该出现环。组件间难道不是通过接口通信的吗?怎么会出现环呢?我意识到我认为的“组件”和这里说的“组件”出现了不一致。《组件》一章说“组件是软件的部署单元”,可以独立部署,也可以做成插件进行动态加载。我想《组件耦合》一章里说的组件,应该是插件,只有插件才会出现互相依赖的情况,可独立部署和发布的组件一般都是依赖于接口的。自然也就不会出现依赖环。依赖关系图可以通过structure 101或者understand这类软件自动获取,用以评估当前组件间依赖关系是否符合预期。无依赖环原则不只适用于组件间,也适用于模块间,即domain层的各个文件夹之间,反思一下,模块间的依赖关系确实是很容易出现环的,模块间的依赖关系很难守护,这往往是业务模型或者算法决定的,这一阶段的设计一般很少考虑依赖关系,在业务专家看来,就像坐在办公桌前面对一桌子的零件,每一个具体问题都可以拿来用来解决问题,机械专家组装机械的时候零件A上需要零件B,零件B上又需要与零件A同一厂家的零件,将来一旦A厂家更换,B的处境就很尴尬,整个系统面临失败的风险。这是一个很现实的问题,这要求业务专家也必须了解“实际”,不能制造空中楼阁,最近新看一本书《系统架构》,就是在说不单单程序需要架构师,所有人造系统都需要架构师。

与三个原则同级标题的,有一个“自上而下的设计”,书中认为“组件结构是不可能自上而下被设计出来的,它必须随着软件系统的变化而变化和扩张”,这与《UNIX编程艺术》的观点是不一致的。关于自上而下还是自下而上,是分场景的,软件是要尽量自上而下的,但一个项目演进过程中总会遇到新的变化方向和聚合实体,这就需要自下而上。熟悉系统的第二次开发是自上而下,新系统的开发是自下而上。

依赖关系必须要指向更稳定的方向。前两天交流的时候我举了个例子,模块A有流量统计的功能,模块B也想做流量统计,那B能不能直接拿A功能用呢?不能,要把流量统计功能提取出来,A和B共同依赖于流量统计。模块的稳定性,书中给了详细的量化稳定性的方法可作参考,一个组件的稳定程度取决于它的修改频率、修改的方式、获取实例的多少、抽象化程度,上面举的就是抽象新模块的例子,修改频率高的模块不稳定比如A和B模块,如果修改的方式总是按系统原始设计的变化方向进行修改也可以认为是稳定的,获取的实例越多、输出越多表明模块与外部的联系越多外部修改很容易引发修改也就越不稳定。

一个组件的抽象化程度应该与其稳定性保持一致。这个原则与上面稳定依赖原则有点像,在依赖于抽象的基础上又做了进一步的要求。稳定组件要高度抽象,否则就会难以修改。比如组件内的主流程,就要足够抽象,主流程太关注细节会导致难于扩展,具体的实现要放到实现层。

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

推荐阅读更多精彩内容

  • 专业考题类型管理运行工作负责人一般作业考题内容选项A选项B选项C选项D选项E选项F正确答案 变电单选GYSZ本规程...
    小白兔去钓鱼阅读 8,970评论 0 13
  • 古人有人生四大乐事之说: 久旱逢甘雨,他乡遇故知, 洞房花烛夜,金榜提名时。 而我们的大文豪苏东坡则认为,人生赏心...
    花落惜无言阅读 652评论 0 2
  • 最近读了一本书,叫《翻译的基础》。 一个做建筑的,平时写写文章来装装文青,今儿又看起翻译的书来,(偷笑)自己都被自...
    歌舒雪阅读 191评论 0 0
  • 姓名:徐芳芳 公司:南京凯弘进出口贸易有限公司 349期努力二组【日精进打卡第263天】 【知~学习】 《六项精进...
    云海沐晨阅读 93评论 0 0
  • 本文写于宝贝女儿出生第80天,大宝4岁9个月。 今天没忍住,对大宝发了好几次脾气,此刻看着他一个人坐在床上乖乖的看...
    大静2020阅读 252评论 0 1