后端技术面试 38 讲
李智慧
同程艺龙交通首席架构师,前 Intel& 阿里架构师,《大型网站技术架构》作者
37373 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
不定期加餐 (1讲)
后端技术面试 38 讲
15
15
1.0x
00:00/00:00
登录|注册

19 | 组件设计原则:组件的边界在哪里?

稳定抽象原则
稳定依赖原则
无循环依赖原则
共同复用原则
共同封闭原则
复用发布等同原则
组件耦合原则
组件内聚原则
思考题
组件设计原则
组件的边界在哪里?
软件需要进行模块化、组件化设计
软件的复杂度和规模成指数关系
组件设计原则

该思维导图由 AI 生成,仅供参考

软件的复杂度和它的规模成指数关系,一个复杂度为 100 的软件系统,如果能拆分成两个互不相关、同等规模的子系统,那么每个子系统的复杂度应该是 25,而不是 50。软件开发这个行业很久之前就形成了一个共识,应该将复杂的软件系统进行拆分,拆成多个更低复杂度的子系统,子系统还可以继续拆分成更小粒度的组件。也就是说,软件需要进行模块化、组件化设计。
事实上,早在打孔纸带编程时代,程序员们就开始尝试进行软件的组件化设计。那些相对独立,可以被复用的程序被打在纸带卡片上,放在一个盒子里。当某个程序需要复用这个程序组件的时候,就把这一摞纸带卡片从盒子里拿出来,放在要运行的其他纸带的前面或者后面,被光电读卡器一起扫描,一起执行。
其实我们现在的组件开发与复用跟这个也差不多。比如我们用 Java 开发,会把独立的组件编译成一个一个的 jar 包,相当于这些组件被封装在一个一个的盒子里。需要复用的时候,程序只需要依赖这些 jar 包,运行的时候,只需要把这些依赖的 jar 包放在classpath路径下,最后被 JVM 统一装载,一起执行。
现在,稍有规模的软件系统一定被拆分成很多组件。正是因为组件化设计,我们才能开发出复杂的系统。
那么如何进行组件的设计呢?组件的粒度应该多大?如何对组件的功能进行划分?组件的边界又在哪里?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了稳定抽象原则在软件设计中的重要性以及具体应用。稳定抽象原则指出,一个组件的抽象化程度应该与其稳定性程度一致,即稳定的组件应该是抽象的,不稳定的组件应该是具体的。文章以JDBC为例,说明了如何通过接口组件的设计来实现稳定抽象原则。同时,文章还强调了在组件的边界与依赖关系划分时需要考虑技术问题和业务场景问题,并指出了在复杂组织中,组件的设计还需要考虑人的因素。最后,文章提出了思考题,鼓励读者思考并分享自己的观点。通过本文,读者可以了解稳定抽象原则在软件设计中的重要性,以及如何在实际开发中应用该原则。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端技术面试 38 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • 草原上的奔跑
    slf4j也是稳定抽象原则的一个例子,具体实现有log4j、logback

    作者回复: 👍 我期待的答案

    2020-01-04
    3
    23
  • Paul Shan
    Linux的文件结构就是抽象稳定的,具体的实现可以分为两大类块设备和流设备,细分为无数硬件驱动。

    作者回复: 👍

    2020-01-16
    2
    3
  • Geek_8c5f9c
    JMS API RabbitMQ,tibco, ActiveMQ 作为jms client 都实现了jms api.

    作者回复: 👍

    2020-01-04
    3
  • Zend
    JSR-303 是Java EE 6 中的一项子规范,叫做BeanValidation, javax.validation包设计相应的Bean Validation API, 官方参考实现是hibernate-validator。

    作者回复: 👍

    2020-01-08
    2
  • 奔奔奔跑
    李老师您好,在微服务架构下,业务开发应该不需要依赖导致原则来实现业务了吧,因为依赖关系大大减少了,这样理解对吗?

    作者回复: 我的理解是恰恰相反,微服务架构下会放大依赖关系导致的问题,而依赖关系是业务复杂度和微服务模块设计方法决定的,并不是用了微服务,依赖关系就减少了。

    2020-01-04
    1
  • 转折点
    李老师好,一直纠结的一个问题,classpath具体在哪里?我怎么知道jar有没有被放到classpath下面?

    作者回复: 自己用java命令行亲手启动一个Java程序就知道了~

    2020-01-03
    1
  • 王沛
    李老师,组件与模块的区别是什么?是组件可以复用吗?还是别的?另外您在共同复用原则里提的,如果不被依赖的类发生变更,就会引起组件变更进而引起使用组件的程序变更,这怎么理解呢?感觉上不被依赖的类即使变更了按说对组件也不该有影响才对

    作者回复: 组件很多时候是物理上的,独立的jar什么的,模块很多时候逻辑上的,订单模块什么的,不过也有很多场合指代同一个东西。 组件中的类变更了,组件不可能不变更的。

    2020-01-26
    2
  • 这个专栏对于在程序设计上的指导意义,在我心中是NO.1。
    2020-08-03
    6
  • 丁丁历险记
    其关键在于针对业务做正交分解。
    2020-01-13
    6
  • escray
    其实我觉的组件设计原则更像是大粒度的面向对象设计原则和设计模式的应用。 复用发布等同原则:单一职责 共同封闭原则:开闭原则 共同复用原则:接口隔离 无循环依赖原则:环状依赖在面向对象设计也需要避免 稳定依赖原则:依赖倒置 稳定抽象原则:开闭原则,面向接口编程 有一点好奇,一般情况下,谁来决定组件设计,或者说如何划分组件?是架构师还是高级程序员。
    2020-09-25
    1
    1
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部