一本适合初中高级程序员的架构书

你好,我是猿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点:

  1. 提升技术能力:参与开源项目的人技术能力都不会太差,所以,可以通过项目和不同的技术人员更深入的沟通,从中学习到更多实践经验,提升自己的技术能力和解决问题的能力。
  2. 主动学习能力:开源项目,一般是工作之外的事情,需要牺牲自己的个人时间,所以,可以通过项目来加强自己主动学习的能力和动力。
  3. 提升个人影响力:如果参与的开源项目比较知名,无形中可以提升个人在技术领域的影响力。

最后,如果本文对你有帮助,请帮忙点赞或转发,想获取更多技术好文和面试经,请关注我。

原创好文

相关推荐
winks32 分钟前
Spring Task的使用
java·后端·spring
Null箘4 分钟前
从零创建一个 Django 项目
后端·python·django
秋意钟13 分钟前
Spring新版本
java·后端·spring
椰椰椰耶15 分钟前
【文档搜索引擎】缓冲区优化和索引模块小结
java·spring·搜索引擎
mubeibeinv17 分钟前
项目搭建+图片(添加+图片)
java·服务器·前端
青莳吖18 分钟前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql
Buleall25 分钟前
期末考学C
java·开发语言
重生之绝世牛码27 分钟前
Java设计模式 —— 【结构型模式】外观模式详解
java·大数据·开发语言·设计模式·设计原则·外观模式
小蜗牛慢慢爬行33 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
A小白59081 小时前
Docker部署实践:构建可扩展的AI图像/视频分析平台 (脱敏版)
后端