你好,我是猿java。
随着互联网的快速发展,技术更迭的速度也是超乎想象,也许花大力气掌握的技能不到几年就过时了。但是有一些东西却是历久弥新,比如:架构思想,设计思维,掌握了这些精髓,可以帮助你快速适应技术更迭。今天推荐一本经典巨作《Clean Architecture》by Robert C. Martin。 本文从书籍简介,内部归纳,个人思考等角度对《架构整洁之道》进行了概括性的解读。
书籍简介
Clean Architecture 原版出自 Robert C. Martin,号称 Bob叔叔。Robert C. Marti 博客 , 下面给出了书籍 英文版和中文版的封面图。
全书 共6大部分,34章,大概324页。
本书脉络图
内容归纳
软件系统的价值
架构是软件系统的一部分,所以要明白架构的价值,首先要明确软件系统的价值。软件系统的价值有两方面,行为价值和架构价值。
行为价值:包括需求的实现,以及可用性保障(功能性 bug、性能、稳定性)等等;
架构价值: 就是让我们的软件能够灵活,简单的支持行为价值;
所以,实际工作中很多时候是在行为价值和架构价值之间的权衡。
软件架构的目标
日常开发中,我们经常听到软件架构
,那么什么是软件架构?软件架构目标又是什么呢?
架构是一个很宽泛的概念,小到一行代码的设计,大到公司集团的战略设计,很多程序员似乎总喜欢把架构等同于系统架构,认为需要设计一个足够大, 参与人数足够多的系统才算得上架构,殊不知真正的架构其实是从自己写的每一行代码开始。
软件架构的终极目标是:用最小的人力成本来满足构建和维护该系统的需求。如果开发中能围绕这个目标,是不是很多过度设计就可以避免?
编程范式
- 结构化编程
- 面向对象编程
- 函数式编程
设计原则
- 单一职责原则(Single responsibility principle, SRP)
- 开放封闭原则(Open--closed principle, OCP)
- Liskov 替换原则(Liskov substitution principle, LSP)
- 接口隔离原则(Interface segregation principle, ISP)
- 依赖倒置原则(Dependency inversion principle, DIP)
更多关于 SOLID原则详解 ,有兴趣的可以前往阅读
架构基本方针
架构工作有两个方针:
- 尽可能长时间地保留尽可能多的可选项
- 低层次解耦方式能解决的,不要用高层次解耦方式
组件的拆分
组件拆分需要在两个维度进行:按层次拆分、按变更原因拆分
组件依赖处理
下面摘取了作者整洁架构原图,依赖顺序是从外层指向内层(从低层次指向高层次),通过图可以看出越具体的策略处于越低的层级,比如外部接口,越抽象的的封装处于越高层级,比如:业务实体,持久层,因此可以做到 下游数据库载体的变更对外层是无感的。
适合人群
初级程序员,中高级程序员 5颗星
强烈推荐阅读...
个人思考
很多人 5年就达到了技术专家的能力,真的是他们天赋异禀吗?
有,但是数量有限,更多的是他们知道如何更好的站在巨人的肩膀上。
如何站在巨人的肩膀上?
阅读经典书籍
读书获益,这是我们从进入学校就一直在干的事情,进入社会之后,我们依然需要保持学习的习惯,推荐读一些国外经典的计算机图书或者国内的翻译版本,以及圈内略有名气的技术人出版的图书。
知识付费
目前国内知识付费的生态已经很不错了,推荐购买一些合适自身情况的系列课程(文字或者视频),原因有三:
- 课程一般是作者长期摸索出来的经验,更体系化和垂直化
- 课程选择的范围多,更能挑选出自己喜欢的风格,加快消化速度
- 适合吸收他人工作经验,缩短自己摸索时间
多和牛人互动
古有「听君一席话,胜读十年书」之说,的确,和有经验的人交谈可以醍醐灌顶,如沐春风。牛人往往对业务或者技术有着独特的见解,和他们互动可以更好的开拓视野。
参与开源项目
现在很多公司的招聘都是优先录取有开源项目的候选人,为什么?
综合来看,主要有以下 3点:
- 提升技术能力:参与开源项目的人技术能力都不会太差,所以,可以通过项目和不同的技术人员更深入的沟通,从中学习到更多实践经验,提升自己的技术能力和解决问题的能力。
- 主动学习能力:开源项目,一般是工作之外的事情,需要牺牲自己的个人时间,所以,可以通过项目来加强自己主动学习的能力和动力。
- 提升个人影响力:如果参与的开源项目比较知名,无形中可以提升个人在技术领域的影响力。
最后,如果本文对你有帮助,请帮忙点赞或转发,想获取更多技术好文和面试经,请关注我。