后端技术面试38讲
李智慧
同程艺龙交通首席架构师,前Intel&阿里架构师,《大型网站技术架构》作者
立即订阅
3838 人已学习
课程目录
已更新 25 讲 / 共 38 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 掌握软件开发技术的第一性原理
免费
软件的基础原理 (8讲)
01丨程序运行原理:程序是如何运行又是如何崩溃的?
02丨数据结构原理:Hash表的时间复杂度为什么是O(1)?
03丨Java虚拟机原理:JVM为什么被称为机器(machine)?
04丨网络编程原理:一个字符的互联网之旅
05丨文件系统原理:如何用1分钟遍历一个100TB的文件?
06丨数据库原理:为什么PrepareStatement性能更好更安全?
07丨编程语言原理:面向对象编程是编程的终极形态吗?
答疑丨Java Web程序的运行时环境到底是怎样的?
软件的设计原理 (14讲)
08丨软件设计的方法论:软件为什么要建模?
09丨软件设计实践:如何使用UML完成一个设计文档?
10 | 软件设计的目的:糟糕的程序员比优秀的程序员差在哪里?
11丨软件设计的开闭原则:如何不修改代码却能实现需求变更?
12 | 软件设计的依赖倒置原则:如何不依赖代码却可以复用它的功能?
13丨软件设计的里氏替换原则:正方形可以继承长方形吗?
14 | 软件设计的单一职责原则:为什么说一个类文件打开最好不要超过一屏?
15丨软件设计的接口隔离原则:如何对类的调用者隐藏类的公有方法?
16 | 设计模式基础:不会灵活应用设计模式,你就没有掌握面向对象编程
17 | 设计模式应用:编程框架中的设计模式
18 | 反应式编程框架设计:如何使程序调用不阻塞等待,立即响应?
19 | 组件设计原则:组件的边界在哪里?
20 | 领域驱动设计:35岁的程序员应该写什么样的代码?
答疑丨对于设计模式而言,场景到底有多重要?
架构的核心原理 (1讲)
21丨分布式架构:如何应对高并发的用户请求
不定期加餐 (1讲)
加餐 | 软件设计文档示例模板
后端技术面试38讲
登录|注册

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

李智慧 2020-01-03
软件的复杂度和它的规模成指数关系,一个复杂度为 100 的软件系统,如果能拆分成两个互不相关、同等规模的子系统,那么每个子系统的复杂度应该是 25,而不是 50。软件开发这个行业很久之前就形成了一个共识,应该将复杂的软件系统进行拆分,拆成多个更低复杂度的子系统,子系统还可以继续拆分成更小粒度的组件。也就是说,软件需要进行模块化、组件化设计。
事实上,早在打孔纸带编程时代,程序员们就开始尝试进行软件的组件化设计。那些相对独立,可以被复用的程序被打在纸带卡片上,放在一个盒子里。当某个程序需要复用这个程序组件的时候,就把这一摞纸带卡片从盒子里拿出来,放在要运行的其他纸带的前面或者后面,被光电读卡器一起扫描,一起执行。
其实我们现在的组件开发与复用跟这个也差不多。比如我们用 Java 开发,会把独立的组件编译成一个一个的 jar 包,相当于这些组件被封装在一个一个的盒子里。需要复用的时候,程序只需要依赖这些 jar 包,运行的时候,只需要把这些依赖的 jar 包放在classpath路径下,最后被 JVM 统一装载,一起执行。
现在,稍有规模的软件系统一定被拆分成很多组件。正是因为组件化设计,我们才能开发出复杂的系统。
那么如何进行组件的设计呢?组件的粒度应该多大?如何对组件的功能进行划分?组件的边界又在哪里?
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《后端技术面试38讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(7)

  • 刘浪
    李老师好,一直纠结的一个问题,classpath具体在哪里?我怎么知道jar有没有被放到classpath下面?

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

    2020-01-03
    1
  • 七七的首席铲屎官
    spring beanfactory 和 applicationcontext也算是吧...
    2020-01-03
    1
  • Zend
    JSR-303 是Java EE 6 中的一项子规范,叫做BeanValidation,
    javax.validation包设计相应的Bean Validation API,
    官方参考实现是hibernate-validator。

    作者回复: 👍

    2020-01-08
  • 你的美
    李老师好!我是一家新创科技公司的,认为像老师这么厉害的技术师们,除了培训还有一件更值得做的事,那就是助力新创的科技公司,赋能他们技术方面的支持与合作(从而获得更大的回报,做价值最大化)。意思是说:
    我有一个特别的项目,资质都已备好,准备做项目的一系列申报,还准备和阿里巴巴的蚂蚁资本、洪泰资本等做投资对接,在这些事之前需要邀请几个像老师这么厉害的技术师们做技术合作,无论是技术开发合作还是股份参与合作都行,考虑到时间的问题,那最少的参与是,只需要答应和不定期的和内部员工做技术交流指导就行。
    我们认为聘请老师做技术合伙人最好(用技术指导~入股)对老师来说是最好的无风险合作方式,怎么个合作法好,也听听老师的建议。老师留个邮箱或者加微信我们再多沟通吧!
    13811289148
    2020-01-05
  • 草原上的奔跑
    slf4j也是稳定抽象原则的一个例子,具体实现有log4j、logback

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

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

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

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

    作者回复: 👍

    2020-01-04
收起评论
7
返回
顶部