Previous Next

架构整洁之道 (孙宇聪)(Z-Library)

Author: 孙宇聪

移动

《架构整洁之道》是创造“Clean神话”的Bob大叔在架构领域的登峰之 作,围绕“架构整洁”这一重要导向,系统地剖析其缘起、内涵及应用场景, 涵盖软件研发完整过程及所有核心架构模式。本书分为6部分,第1部分纲领 性地提出软件架构设计的终极目标,描述软件架构设计的重点与模式;第2 ~4部分从软件开发中三个基础编程范式的定义和特征出发,进一步描述函 数、组件、服务设计与实现的定律,以及它们是如何有效构建软件系统的整 体架构的;第5部分从整洁架构的定义开始,详细阐述软件架构设计过程中 涉及的方方面面,包括划分内部组件边界、应用常见设计模式、避开错误、 降低成本、处理特殊情况等,并以实战案例将内容有机整合起来;第6部分 讲述具体实现细节;附录则透过作者数十年的软件从业经历再次印证本书的 观点。 对于每一位软件研发从业人员——无论从事的是具体编码实现、架构设 计,还是软件研发管理,本书都是不可或缺的。

📄 File Format: PDF
💾 File Size: 14.2 MB
5
Views
0
Downloads
0.00
Total Donations

📄 Text Preview (First 20 pages)

ℹ️

Registered users can read the full content for free

Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.

📄 Page 1
(This page has no text content)
📄 Page 2
架洁 Clean Architecture []Robert C.Martin 著 孙聪 译 电⼯业 Publishing House of Electronics Industry 北·BEIJING
📄 Page 3
内简 《架洁》是创“Clean话”的Bob⼤叔在架领域的 作,围绕“架洁”这⼀重导向,统地其缘起、内 应⽤场,盖软件研发过程有架模式。书为6 ,1纲领性地提软件架设计的终⽬标,描软件架设 计的重点模式2〜4软件开发中三基础编程范式的义 和征发,进⼀描、组件、服务设计实现的律, 们是何有软件统的体架的5洁架的 义开,详细阐软件架设计过程中的⾯⾯,括划内 组件边界、应⽤常⻅设计模式、开错误、成、处理情 况等,实战内有机起来6讲体实现细 节附录则过作者⼗年的软件业经历再证书的观点。 对于⼀软件研发业员——论事的是体编码实现、 架设计,还是软件研发理,书都是不可或的。 Authorized translation from the English language edition,entitled Clean Architecture,1st Edition,ISBN:0134494164 by Robert C.Martin,published by Pearson Education,Inc,Copyright © 2018 Pearson Education,Inc.All rights reserved.No part of this book may be reproduced or transmitted in any form or by any means,electronic or mechanical,including photocopying,recording or by any information storage retrieval system,without permission from Pearson Education,Inc. CHINESE SIMPLIFIED language edition published by PUBLISHING HOUSE OF ELECTRONICS INDUSTRY,Copyright©2018. 书简体中专有由Pearson Education⽣团 授予电⼯业。未经者预先书⾯许可,不得任何式 制或袭书的任何。
📄 Page 4
书简体中贴有Pearson Education⽣团光伪 标签,标签者不得销。 贸易同记 图01-2017-7530 图书在编⽬(CIP)据 架洁/()罗伯·C.⻢丁(Robert C.Martin)著孙 聪译.—北电⼯业,2018.9 书Clean Architecture ISBN 978-7-121-34796-2 Ⅰ.①架… Ⅱ.①罗…②孙… Ⅲ.①软件设计 Ⅳ.①TP311.1 中国图书馆CIP据(2018)168309 策划编辑张⾬ 责任编辑付 刷三河远务有司 订三河远务有司 发⾏电⼯业 北万路173箱 邮编100036 开787×980 1/16 张22 394千 2018年9⽉1 2018年9⽉1刷 99.00元 凡购买电⼯业图书有损问题,请向购买书调换。 若书,请发⾏联,联邮购电话(010) 88254888,88258888。
📄 Page 5
质量诉请发邮件zlts@phei.com.cn,盗举报请发邮件 dbqq@phei.com.cn。 书询联式010-51260888-819,faq@phei.com.cn。
📄 Page 6
⼀ 在我⾥,程员可为三层程员、⼯程师和架 师。 程员是编代码的。编代码的式有,让 程跑起来,正地处理业务程和对据进⾏计算,可说“ 编代码”。程员需悉程的逻辑处理过程,需悉程 语的性,还需悉⼀些计算机操作统的调⽤式, ⽤户侧,据和业务逻辑处理,再计算机统 的代码,有地把⽤户、据、业务和计算机串联和拼 来。 ⽽,其中⼀些程员发现,让代码跑起来是不的,为这 界是不变的,他们发现⾃⼰需更的时间来维护代码 加的需,扩有的程,已有的功,优性……⼀ 维护不过来,还需更的,于是代码还需在不同 间轮转他们发现代码需跑起来,还需易读、易扩、易维 护,可重⽤。于是,这些使⽤各种各样的⼿和技术不 提代码的易读性、可扩性、可维护性和重⽤性。我们把这些有 “洁”、有⼯精精、有的程员作⼯程师,⼯程师不仅仅是 在编代码,他们⽤⼯程的来编代码,便让编程开发更为 和快。他们把编程当成⼀种设计,⼀种⼯业设计,把代码模块
📄 Page 7
,让这些模块可更易地拼和组织,让代码—— 阅读和维护这些代码看阅式⼀样畅快。 但是故事还,这些拥有⼯精的⼯程师们还是难决某 些问题,这些渐渐地发现,这界上有问题翘翘⼀ 样,⼀边,这⼀边上,另⼀边下来。⽤间 换时间,⽤时间换间⼀样,你难找同时满⾜间和时间 的“双利”CAP的三选⼆的理论⼀样,这界不在 的决,论什都有的⼀⾯和不的⼀⾯。⽽且,这些 ⼯程师还渐渐发现,当⼀的技术来决⼀已有的问题 时,这的技术带来更的问题,问题有⼀⽣体⼀ 样,们不地和进。渐渐地,他们发现,问题的和 统的杂呈正,⽽且不仅是线性正,还可呈级正,此时 来难做技术决。但是有⼀些资的⼯程师开来挑战这 些问题,有的基于业务给平的,有的开尝试设计更 级的技术,有的开设计更活的统,有的则开简和轻量 统……这些智、经验⾜、不怕难的⼯程师们领⾏业 前⾏。他们是架师 觉Bob⼤叔的著作也在⾛这过程,《代码洁 》你易读、可扩、可维护、可重⽤的代码,《代码洁 程员的职业》你样变成⼀有的程员,⽽《架 洁》基上是在描软件设计的⼀些理论知识。《架洁 》⼤体成三编程范式(结编程、⾯向对编程和 式编程),设计则(主是SOLID),软件架(其中讲 的内)。总体来说,这书中的内可让你 观(代码层⾯)和观(架层⾯)两层⾯对软件设计有⼀ ⾯的。
📄 Page 8
但是,果你想这书⾥找⼀些可⻢决体问题的⼯ 程架和技术,怕你失。这书中更的是⼀些基础的理 论知识,看你可较“”,为这些基础知识对于⽣活在 这发的喜欢快的中的来说,可难理其中 的值——⼤的⽬标不是设计⼀优质的软件或架,⽽是 快地决⼀体的问题,成⾃⼰的⼯作。⽽,可有你 过⾜的,掉过⾜的,经历过⾜的苦,再来读这 书时,你发现书中的这些“陈旧的知识”是满智。⽽ 且,果有⼀,你我这⽼⼀样,看司和 年轻的程员还在不地掉和挣扎,你明⽩这些知识的重性 。 我觉得,这书是架⾯的⻔级读物,但也不经 验不⾜的员习,这书更的读者群是,有3〜5年编程经验、 需⻔软件设计和架的⼯程师或程员。 ,我想下⼀观点和⼀组问题。 观点论是观界的代码,还是观层⾯的架,论是三 种编程范式还是服务架,们都在决⼀问题——制和 逻辑。谓制是对程转的业务逻辑的代码或统的 制(线程、、服务发现、署、弹性伸缩等),谓逻辑则 是实实在在的业务逻辑,是决⽤户问题的逻辑。制和逻辑成 体的软件杂,有地制和逻辑让你的统得⼤的 简。 问题果你成为⼀架师,你需明地⼏组词语 (何们正是给你的问题),否则你不可成为⼀格的 ⼯程师或架师。这⼏组词语是简单vs.简、平vs.协、代
📄 Page 9
vs.半成品。果你不地义其中的别,那你难 做正的决,也不可有成为⼀优的⼯程师或架师。 我相这观点和这组问题有助于你更地阅读理这 书,也让你进⾏更的思,带思读这书,让你更 陈皓 (@左⽿耗)
📄 Page 10
⼆ 久远的诲,古⽼的智 果让你⼿⼀不稳但紧的在线统,这统还有各种 问题变量常,赖逻辑错综杂,层结乱七糟, 署程⼀糊,监统⼀⽚⽩……你该办 前⼏年我这种问题,我对频发的故细观,发现 键的问题果不动,这统的功还是相对稳 的,但经常有⼀些围需开发,这时由于有的赖逻辑和层 结不,导“牵⼀发⽽动”的情况,加上测试不 ,⼏乎围功上线更,功都受响, 重⼏“调试→正→上线”的程。 办⼤说办把单元测试都补,重代码 功和功,业务谈暂需……这些办都对, 但是,都需时间⻅,⽽我们的是时间。 我提⼀“笨”的办把有“共变量”都抽Redis中进⾏ 读,消灭地副,把稳程署⼏,这样可 动⼏实,这些实标记为AB两组。同时,在前⾯代理 服务,⽤于请——功请配A组(程基不更 ),围功请配B组(程业务需更)。这样做看 起来有点此⼀举——AB两组都有代码提供服务,⽽且过
📄 Page 11
Redis共状态,但是实现论B组的程何更,都不响 A组载的服务的⽬的。 虽当时不说“这样玩呢”,但实有。当 署,当⽣,在线服务稳下来,便开发的围功有问 题,服务也不受任何响。这样业务员满,开发员也可 对统做。 来有不问我是想这办的,是为我是 ⽼程员,成⻓在⾯向对的年代,⽤SOC(点)、SRP (单⼀职责则)、OCP(开闭则)这些东对我来说同 。体这,是识别点、责任、保持 点的封闭⽽已。 来我知,我提的这有专⻔的“蓝绿 署”。当我⾃认是⽼程员,不懂这些鲜也不紧。 实,不程员已经不认识SOC、SRP、OCP、LSP等“古⽼”的玩 ,⼤悉的是各种语、库、架、代码托。联 开发场千变万,技术⼀⽇千⾥,⽽⾯向对在不的脑⾥早 是不⽤的⽼古董。有“⽼⼀辈”的程员还记得那些古⽼的 诲,那些古的技。但是这些东,总有⼀时代 吗 实际上,这也是我读《架洁》的疑惑。虽Bob⼤叔 这对我们这些“⽼程员”来说可谓雷贯⽿,前针对⼀性 软件开发著的《代码洁》和《代码洁程员的职业 》也实受欢,但架,还结编程、⾯向对 编程、式编程起,还时间释SRP、OCP、LSP等则,实在 难掩“古⽼”的觉。请问,们和的“架”有什吗
📄 Page 12
不过,果你耐读下发现,还有。照Bob⼤叔 的说,谓架是“⽤⼩的⼒成来满⾜和维护统需 ”的设计⾏为。前的⾯向对统和的布式统,在这⼀点 上是⼀的。久远的诲,尊重古⽼的智,的架师 也中受。不我们经典的三编程范式来举,看看这 些“⽼掉”的玩⼉和的架设计有什联。 ⼤对结编程的⼀理是,由if-else、switch-case的语 句组织程代码的编程式,杜绝goto导的乱。但是更 的层上看,也是⼀种设计范式,使⽤goto,使⽤if-else、 switch-case制语句和、组织起来的程代码,可 保证程的结是的,⾃顶向下层层细,消灭杂错,杜绝 。 联的布式统,我们在设计的时,的做⾃顶 向下层层细吗有,我看的统设计图⾥,有“层 ”的,各模块有⼀的层划,统的不是 统,⽽是⼀盘散式的⼝,⼝间调、乱成⼀团 的情况也时常现,带来的是维护和调试的噩。散历史的 雾,不正是古⽼的goto阱的再现吗 ⼤对⾯向对编程的⼀理是,由封、继、态三种 性持的,、⼝等若⼲的编程式。但是更的层 上看,也是⼀种设计范式。态⼤算其中奇的性,程 员在⼝时做抽,代码可活,情况时, ⼀实现可缝对。 联的布式统,我们在设计的时,的做⼝ ⾜抽、模块缝对吗有,我看⼝的设计常 ,⼝不是基于⾏为⽽是基于场的实现,有做当的抽
📄 Page 13
,也有为未来预间,导约僵硬。⼀种终 呈现形式,内⽣产程⼤动⼲⼽,这样的不 ⻅。抹历史的尘,这不正是“态”现前的吗 ⼤对式编程的⼀理是,为基单元,有变量 (更地说是不重赋值)也有副作⽤的编程式。但是更 的层上看,彻可变性,变量或者状态默认是不可变 的,果变,则必须经过理设计的专⻔机制来实现。, 也锁、状态冲等烦。 联的布式统,我们在设计的时,的彻 可变性、状态冲吗有,我看状态或变量的⼝ ⼤暴露,不经(或者恶),导奇怪的故。Bob⼤叔 举⼀相当有的,果保证操作性精还 各时的状态,有办是这样的提供CR操作,⽽不提供的 CRUD操作(MySQL的binlog那样)。平时加操作记录 可,各时的状态永远过重前的操作记录得,这样彻 状态的错乱。这办看起来古怪,但我的在前的开发中⽤ 过(当是在程⽣周期有的场下),⽽且的过错。 坦⽩说,看《架洁》这书,我⾥受点。为 我发现,我们这些⽼程员的知识其实有过时,不光鲜的架 其实决的还是那些古⽼的问题。Bob⼤叔的⼿点拨, 我时,受“重发现智”的。 当,架设计是⼀⻔杂的问,综虑编码、质量、 署、发布、维、、升级等等各种,做。消是, Bob⼤叔的这书覆盖⾯,各⾯,相你认读书⼀ 和我⼀样有不⼩的获。⼀的问题是,你应这⽼程员
📄 Page 14
的⼝吻和节他当也⾏的打⻋统做,但他更 悉的还是链器、C语、UML图等玩。 不过我觉得,这都不是⼤问题。看得间的赖不 理,⾃易发现统间的赖不理得懂UNIX何 义⽤的IO设备,⾃易想对PC Web、Mobile Web、App内 的⻚⾯做当抽认得各线程、进程、链库的职责,⾃易 明⽩服务也需边界调⽤。更的是,这种古⽼的视⻆看 问题,更摆脱细节的扰,把问题的。⽼说的那 样⼤国⼩鲜。 ,对,“⼤国⼩鲜”也是久远的诲,也古⽼的 智。 晟 “晟为”(yurii-says)作者 现在江团担任平架负责
📄 Page 15
软件架(architecture)是什 不论⻆软件统,都不可⾯⾯俱。果架 ⻆来,在⼀程上做⼤⼩,把重点,但是 也不可地错失某些重的细节。 软件架的的⼀重点是组织结(structure)。不是讨 论组件(Component)、(Class)、(Function)、模块 (Module),还是层级(Layer)、服务(Service)观观的 软件开发过程,软件的组织结都是我们的主点。但是实 界中的许软件项⽬不照我们的和⽣⻓——们 超⼤型国那样,层层,缠绕成⼀团乱[1]。有的时的 难相,软件项⽬的组织结性也物理筑那样⼀⽬,层 。 物理筑,不其地基是⽯头还是泥,形状是⼤还是宽阔, ⻛格是⽓势还是⼩珑,其组织结都⼀⽬。物理筑的 组织结必须“受重⼒”这⼀⾃规律,同时还符筑材料⾃ 的物理性。软件项⽬则有律可。另,物理筑是⽤ 砖头、泥、⽊头、钢铁或者玻等标材料成的,⽽⼤型软件项 ⽬是由⼩的软件组件成的,这些软件组件是由更⼩的软件组 件成的,层层,穷尽。
📄 Page 16
,当讨论软件架时,别软件项⽬是有递归 (recursive)和形(fractal)点的,终都由⼀⾏⾏的代码组 成。脱⼀⾏⾏的代码,脱体的细节设计,架设计 谈起。⼤型物理筑常可⽤模型层描细节,但是软 件项⽬内结是难⽤模型层描的。软件项⽬也有内结 ,但是其结论量上还是样性上来说,都远远超过物理 筑的结。可不张地说,软件开发物理筑需更⻓、 更专的设计过程,软件架师应该筑架师更懂架 模型是的⽰式,但是不某PowerPoint图 中的彩块看,简单易懂,也代⼀软件 的架。是该软件的架的⼀视图,⽽。软件的架 有固的现形式,你看的⼀视图的背都是架师 做的层层抉择。⼀视图些,些⽤ 形状和颜调些,有些地⼀笔带过, 略,这些都是这视图的性。⽽,视图都是对 的,们有优。[2] 虽软件地⽤模型⽰,但还是在现实界中 ⾏的。在设计软件架的过程中,我们必须理和现实的约束 件。CPU和络带宽在⼤程上决统的性,⽽ 内和储间的⼤⼩也⼤幅响代码的设计野。 ⼠,这是爱情的穷恶处,的是穷的,⽽实际 ⾏动处处受。的是⽌的,⾏为不得不现实的 制。 ——·⼠亚[3] 的经济活动都是在于现实界中的,我们可利 ⽤现实界的⼀些则来量和理软件开发过程中那些不量和
📄 Page 17
物的。 软件架是统设计过程中的重设计决的,可过变 更成来量设计决的重程。 ——Grady Booch 需付的时间、钱和⼒成是软件架规模⼤⼩的 量标,也可⽤来架设计和细节设计。同时,我们还可 据这来某架设计是还是坏⼀的架,不 仅在某⼀时满⾜软件⽤户、开发者和有者的需,更在 ⼀时间内持续满⾜他们的续需。 果你觉得架的成,那你可试试选择的架加上 ⼯重来的成。 ——Brian Foote 和 Joseph Yoder ⼀统的常规变更不应该是成的,也不应该需难决 策的⼤型设计调,更不应该需单独项来进。这些常规变更应 该可⽇或者周的⽇常统维护中成。 我们预知某统未来的变更需,便提前做备 呢我们在有晶时光机的情况下,未⼘先知, 未来的变更成呢 谓软件架,是你希在项⽬⼀开做对,但是不⼀ 做得对的决策的。 ——Ralph Johnson 历史已经难,我们对现实的认知也不可,预未来 更难。 这是不同的软件开发理论的主点。 其中⼀较观阴的路线认为,有和刚性带来 壮稳。果某项变更成,那应该视——变更背
📄 Page 18
的需应该制,应该丢僚主义的⼤机器中绞 。架师的决永远是的、彻的,软件架是体开发 员的敌托邦噩(Dystopia),永远是有沮丧的泉。 另⼀路线则处⼤量的机性的⽤设计。在这样的 软件项⽬中处都是硬编码的测性代码,处是穷尽的, 在成牍的代码。维护这样的项⽬,肯情 况,⽽且论预资都不应付。 ⽽书试图的则是⼀洁路线。这路线拥软件的活 变性,其作为统的⼀级设计⽬标。同时,我们也认不 知晓,但在不的情况下做优的决策。 这路线可让我们发挥优势,开势。过实际创和, 不地提问题和进⾏实验。优的软件架不是⼀成不变的,有 经过不打和进终成。 软件架是⼀想,有过实际实现和测量证实。 ——Tom Gilb 这路线,我们需⽤,贯,不观和思,在 则指导下不实。虽这可起来烦、,但是坚 持⾛下⼀成功。 ⾛快的⼀是先⾛。 ——Robert C.Martin ⼀起受这过程吧 Kevlin Henney 2017年5⽉ [1]是the-big-ball-of-mud,⻅ https://en.wikipedia.org/wiki/Big_ball_of_mud。——译者
📄 Page 19
[2]这⼀的思是,软件的架设计是⻆综虑的过程。对于 某软件的架来说,不在⼀固不变的视图,也不在谓的 佳试图。——译者 [3]⾃《脱爱勒克来》三幕。——译者
📄 Page 20
前 书的作《架洁》,使⽤这可谓是⼗胆 ⼤,可说有点⽬中。那,为什我选择这书, 且使⽤这呢 ⾃1964年,12岁的我下⽣的⼀⾏代码算起,2016年, 我已经编程超过50年。在这时间⾥,我⾃认为软件统 的⼀些——且我相这些和经验对其他应该有些值。 我习的是实际⼀些⼤⼤⼩⼩的软件统。我过⼩型 的式统,也过⼤型的处理统我过实时制 统,也过Web⻚统我过⾏程、图形界⾯程、进 程理程、戏、计费统、统、设计⼯、图⼯等。 我过单线程程,也过线程程我过由⼏重型进程 组成的应⽤,也过由⼤量轻型进程组成的应⽤我过处理 器的应⽤,还有据库、值计算和⼏何计算应⽤, 其他型的应⽤。 回⾸过,经历这应⽤和统的过程,我的领 悟是 软件架的规则是相同的 我的这些统是千万别的,为什有这些⼤的 统都同样的软件架规则呢这⾥我得的结论是,软件架 规则和其他变量。
The above is a preview of the first 20 pages. Register to read the complete e-book.

💝 Support Author

0.00
Total Amount (¥)
0
Donation Count

Login to support the author

Login Now

Recommended for You

Loading recommended books...
Failed to load, please try again later
Back to List