superhj1987 / ToDo

我的ToDo列表
3 stars 0 forks source link

《Clean Architecture》 #5

Open superhj1987 opened 6 years ago

superhj1987 commented 6 years ago

原计划边读边翻译,但鉴于时间精力不够且已经有中文版面世:https://item.jd.com/12447192.html,译者也是非常资深的工程师,并且有左耳朵耗子这种大咖做序,想必是不错的一次翻译。故放弃自己的翻译计划,在这里只记录阅读英文原版的一些笔记和思考。

superhj1987 commented 6 years ago

先摘录一下左耳朵耗子在中文版的序中写的一段话,我自己也感觉很认同的。

观点:无论是微观世界的代码,还是宏观层面的架构,无论是三种编程范式还是微服务架构,它们都在解决一个问题——分离控制和逻辑。所谓控制就是对程序流转的与业务逻辑无关的代码或系统的控制(如多线程、异步、服务发现、部署、弹性伸缩等),所谓逻辑则是实实在在的业务逻辑,是解决用户问题的逻辑。控制和逻辑构成了整体的软件复杂度,有效地分离控制和逻辑会让你的系统得到最大的简化。

问题:如果你要成为一名架构师,你需要明确地区分几组词语(如何区分它们正是留给你的问题),否则你不可能成为一名合格的工程师或架构师。这几组词语是简单vs.简陋、平衡vs.妥协、迭代vs.半成品。如果你不能很清楚地定义出其中的区别,那么你将很难做出正确的决定,也就不可有成为一名优秀的工程师或架构师。

此外,另一个序中的一个蓝绿部署的概念也值得理解并运用,也是我在工作中经常会用到的一种快速解决方案。

把所有“共享变量”都抽到Redis中进行读写,消灭本地副本,然后把稳定版本程序多部署几份,这样就可以多启动几个实例,将这些实例标记为AB两组。同时,在前面搭建代理服务,用于分流请求——核心功能请求分配到A组(程序基本不更新),外围功能请求分配到B组(程序按业务需求更新)。这样做看起来有点多此一举——AB两组都只有部分代码提供服务,而且要通过Redis共享状态,但是却实现了无论B组的程序如何更新,都不会影响A组所承载的核心服务的目的。

superhj1987 commented 5 years ago

软件架构的目标就是将构造和维护所需系统的人力成本最小化。衡量设计质量的一个简单指标就是为了满足客户需要而付出的成本。如果是很少的成本,而且贯穿整个系统生命周期,那么就是好的设计。如果随着每次发布,成本都在上升,那么设计就是不好的。

superhj1987 commented 5 years ago

软件的两个最大价值是行为Behavior和架构Architecture。前者表示如何让系统工作,第一特点是紧急;后者则意味着系统是否容易改动,第一特质是重要。其中更为重要的是后者。

superhj1987 commented 5 years ago

三大编程范式: