最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

架構整潔之道

2023-03-17 22:49 作者:東門沐雨  | 我要投稿

鏈接:https://pan.baidu.com/s/1okhpmVSD249pSLElZxCmpw?pwd=ek8z?

提取碼:ek8z

編輯推薦

適讀人群 :對于每個軟件架構師、系統(tǒng)分析人員、系統(tǒng)設計人員和軟件管理員,以及每個必須執(zhí)行其他人的設計程序員來說,本書都是不可多得的書籍。

善用軟件架構的通用法則,即可顯著提升開發(fā)者在所有軟件系統(tǒng)全生命周期內的生產力。如今,傳奇軟件匠師Robert C. Martin(Bob大叔),攜暢銷書Clean Code與The Clean Coder所獲巨大成功之威,向我們深刻揭示了這些法則并親授運用之道。

Martin在《架構整潔之道》中遠不只是在為我們提供選項,他幾乎是在將軟件世界中橫跨半個世紀的各種架構類型的經驗傾囊相授,目的是讓讀者既能閱盡所有架構選型,又可通曉其如何決定成敗。Martin也的確不負厚望,本書中充滿了直接而有效的解決方案,以供讀者應對自己面臨的真正挑戰(zhàn)——那些或最終成就或徹底破壞項目的挑戰(zhàn)。

《架構整潔之道》不可不讀,無論讀者是現(xiàn)任的還是將來的軟件架構師、系統(tǒng)分析師、系統(tǒng)設計師或軟件項目經理,或是身負將他人設計落地重任的開發(fā)人員,這本書都可以讓你們受益匪淺。


內容簡介

《架構整潔之道》是創(chuàng)造“Clean神話”的Bob大叔在架構領域的登峰之作,圍繞“架構整潔”這一重要導向,系統(tǒng)地剖析其緣起、內涵及應用場景,涵蓋軟件研發(fā)完整過程及所有核心架構模式?!都軜嬚麧嵵馈贩譃?部分,第1部分綱領性地提出軟件架構設計的終目標,描述軟件架構設計的重點與模式;第2~4部分從軟件開發(fā)中三個基礎編程范式的定義和特征出發(fā),進一步描述函數(shù)、組件、服務設計與實現(xiàn)的定律,以及它們是如何有效構建軟件系統(tǒng)的整體架構的;第5部分從整潔架構的定義開始,詳細闡述軟件架構設計過程中涉及的方方面面,包括劃分內部組件邊界、應用常見設計模式、避開錯誤、降低成本、處理特殊情況等,并以實戰(zhàn)案例將內容有機整合起來;第6部分講述具體實現(xiàn)細節(jié);附錄則透過作者數(shù)十年的軟件從業(yè)經歷再次印證《架構整潔之道》的觀點。

對于每一位軟件研發(fā)從業(yè)人員——無論從事的是具體編碼實現(xiàn)、架構設計,還是軟件研發(fā)管理,《架構整潔之道》都是不可或缺的。

作者簡介

Robert C. Martin,Object Mentor公司總裁,面向對象設計、模式、UML、敏捷方法學和極限編程領域的資深顧問。他是Designing Object-Oriented C++ Applications Using the Booch Method 以及 Jolt 獲獎圖書 Agile Software Development, Principles,Palterns,and Practices(中譯版《敏捷軟件開發(fā):原則、模式與實踐》)《代碼整潔之道》等暢銷書作者。


譯者簡介

孫宇聰:曾就職于美國加利福尼亞谷歌總部,后先后就任

Coding.net技術負責人、火幣中國全球IT負責人及火幣美國硅谷研發(fā)團隊負責人,以及Facebook臉書運維技術經理等職位。譯有《SRE:谷歌運維揭秘》《架構整潔之道》《BPF之巔:洞悉Linux系統(tǒng)和應用性能》等名著,曾在全球軟件開發(fā)大會、Qcon、全球架構師峰會、 O'Reilly Velocity等科技峰會進行公開演講。


目錄

第1部分 概述

第1章 設計與架構究竟是什么 3

目標是什么 4

案例分析 5

本章小結 11

第2章 兩個價值維度 12

行為價值 13

架構價值 13

哪個價值維度更重要 14

艾森豪威爾矩陣 15

為好的軟件架構而持續(xù)斗爭 16

第2部分 從基礎構件開始:編程范式

第3章 編程范式總覽 21

結構化編程 22

面向對象編程 22

函數(shù)式編程 23

僅供思考 23

本章小結 24

第4章 結構化編程 25

可推導性 26

goto是有害的 28

功能性降解拆分 29

形式化證明沒有發(fā)生 29

科學來救場 29

測試 30

本章小結 31

第5章 面向對象編程 32

封裝 33

繼承 36

多態(tài) 38

本章小結 44

第6章 函數(shù)式編程 45

整數(shù)平方 46

不可變性與軟件架構 47

可變性的隔離 48

事件溯源 49

本章小結 51

第3部分 設計原則

第7章 SRP:單一職責原則 56

反面案例2:代碼合并 59

解決方案 60

本章小結 61

第8章 OCP:開閉原則 62

思想實驗 63

依賴方向的控制 67

信息隱藏 67

本章小結 67

第9章 LSP:里氏替換原則 68

繼承的使用指導 69

正方形/長方形問題 70

LSP與軟件架構 70

違反LSP的案例 71

本章小結 73

第10章 ISP:接口隔離原則 74

ISP與編程語言 76

ISP與軟件架構 76

本章小結 77

第11章 DIP:依賴反轉原則 78

穩(wěn)定的抽象層 79

工廠模式 80

具體實現(xiàn)組件 82

本章小結 82

第4部分 組件構建原則

第12章 組件 84

組件發(fā)展史 85

重定位技術 88

鏈接器 88

本章小結 90

第13章 組件聚合 91

復用/發(fā)布等同原則 92

共同閉包原則 93

共同復用原則 94

組件聚合張力圖 95

本章小結 97

第14章 組件耦合 98

無依賴環(huán)原則 99

自上而下的設計 105

穩(wěn)定依賴原則 106

穩(wěn)定抽象原則 112

本章小結 117

第5部分 軟件架構

第15章 什么是軟件架構 120

開發(fā)(Development) 122

部署(Deployment) 123

運行(Operation) 123

維護(Maintenance) 124

保持可選項 124

設備無關性 126

垃圾郵件 128

物理地址尋址 129

本章小結 130

第16章 獨立性 131

用例 132

運行 133

開發(fā) 133

部署 134

保留可選項 134

按層解耦 135

用例的解耦 136

解耦的模式 136

開發(fā)的獨立性 137

部署的獨立性 137

重復 138

再談解耦模式 139

本章小結 141

第17章 劃分邊界 142

幾個悲傷的故事 143

FitNesse 146

應在何時、何處畫這些線 148

輸入和輸出怎么辦 151

插件式架構 152

插件式架構的好處 153

本章小結 154

第18章 邊界剖析 155

跨邊界調用 156

令人生畏的單體結構 156

部署層次的組件 158

線程 159

本地進程 159

服務 160

本章小結 161

第19章 策略與層次 162

層次(Level) 163

本章小結 166

第20章 業(yè)務邏輯 167

業(yè)務實體 168

用例 169

請求和響應模型 171

本章小結 172

第21章 尖叫的軟件架構 173

架構設計的主題 174

架構設計的核心目標 175

那Web呢 175

框架是工具而不是生活信條 175

可測試的架構設計 176

本章小結 176

第22章 整潔架構 177

依賴關系規(guī)則 179

一個常見的應用場景 183

本章小結 184

第23章 展示器和謙卑對象 185

謙卑對象模式 186

展示器與視圖 186

測試與架構 187

數(shù)據(jù)庫網關 188

數(shù)據(jù)映射器 188

服務監(jiān)聽器 189

本章小結 189

第24章 不完全邊界 190

省掉最后一步 191

單向邊界 192

門戶模式 193

本章小結 193

第25章 層次與邊界 194

基于文本的冒險游戲:Hunt The Wumpus 195

可否采用整潔架構 196

交匯數(shù)據(jù)流 199

數(shù)據(jù)流的分割 199

本章小結 201

第26章 Main組件 203

最細節(jié)化的部分 204

本章小結 208

第27章 服務:宏觀與微觀 209

面向服務的架構 210

服務所帶來的好處 210

運送貓咪的難題 212

對象化是救星 213

基于組件的服務 215

橫跨型變更 216

本章小結 216

第28章 測試邊界 217

測試也是一種系統(tǒng)組件 218

可測試性設計 219

測試專用API 220

本章小結 221

第29章 整潔的嵌入式架構 222

“程序適用測試”測試 225

目標硬件瓶頸 228

本章小結 238

第6部分 實現(xiàn)細節(jié)

第30章 數(shù)據(jù)庫只是實現(xiàn)細節(jié) 240

關系型數(shù)據(jù)庫 241

為什么數(shù)據(jù)庫系統(tǒng)如此流行 242

假設磁盤不存在會怎樣 243

實現(xiàn)細節(jié) 243

但性能怎么辦呢 244

一段軼事 244

本章小結 246

第31章 Web是實現(xiàn)細節(jié) 247

無盡的鐘擺 248

總結一下 250

本章小結 251

第32章 應用程序框架是實現(xiàn)細節(jié) 252

框架作者 253

單向婚姻 253

風險 254

解決方案 255

不得不接受的依賴 255

本章小結 256

第33章 案例分析:視頻銷售網站 257

產品 258

用例分析 258

組件架構 260

依賴關系管理 261

本章小結 262

第34章 拾遺 263

按層封裝 264

按功能封裝 266

端口和適配器 268

按組件封裝 270

具體實現(xiàn)細節(jié)中的陷阱 274

組織形式與封裝的區(qū)別 275

其他的解耦合模式 277

本章小結:本書拾遺 279

后序 280

附錄A 架構設計考古 283


查看全部↓

精彩書摘

推薦序一

在我心里,程序員可以分為三個層次:普通程序員、工程師和架構師。

普通程序員是編寫代碼的人。編寫代碼的方式有很多,只要能讓程序跑起來,能正確地處理業(yè)務流程和對數(shù)據(jù)進行計算,就可以說“會編寫代碼”。程序員需要熟悉整個程序的邏輯及處理過程,需要熟悉程序語言的特性,還需要熟悉一些計算機操作系統(tǒng)的交互調用方式,才能寫出從用戶側交互,到數(shù)據(jù)和業(yè)務邏輯處理,再到與計算機系統(tǒng)交互的代碼,有效地把用戶信息、數(shù)據(jù)、業(yè)務和計算機串聯(lián)和拼裝出來。

然而,其中一些程序員發(fā)現(xiàn),只讓代碼跑起來是不夠的,因為這個世界是不斷變化的,他們發(fā)現(xiàn)自己需要花更多的時間來維護代碼:增加新的需求,擴展原有的流程,修改已有的功能,優(yōu)化性能……一個人完全維護不過來,還需要更多的人,于是代碼還需要在不同人之間輪轉;他們發(fā)現(xiàn)代碼除了需要跑起來,還需要易讀、易擴展、易維護,甚至可以直接重用。于是,這些人使用各種各樣的手段和技術不斷提高代碼的易讀性、可擴展性、可維護性和重用性。我們把這些有“潔癖”、有工匠精精、有修養(yǎng)的程序員叫作工程師,工程師不僅僅是在編寫代碼,他們會用工程的方法來編寫代碼,以便讓編程開發(fā)更為高效和快速。他們把編程當成一種設計,一種工業(yè)設計,把代碼模塊化,讓這些模塊可以更容易地交互拼裝和組織,讓代碼排列整齊——閱讀和維護這些代碼就像看閱兵式一樣舒心暢快。

但是故事還沒完,這些擁有工匠精神的工程師們還是難以解決某些問題,這些人漸漸地發(fā)現(xiàn),這個世界上有很多問題就像翹翹板一樣,只能要一邊,這一邊上去了,另一邊就下來了。就像要么用空間換時間,要么用時間換空間一樣,你很難找到同時滿足空間和時間要求的“雙利解”;就像CAP的三選二的理論一樣,這個世界不存在完美的解決方案,無論什么方案都有好的一面和不好的一面。而且,這些工程師還漸漸發(fā)現(xiàn),每當引入一個新的技術來解決一個已有的問題時,這個新的技術就會帶來更多的問題,問題就像有一個生命體一樣,它們會不斷地繁殖和進化。漸漸地,他們發(fā)現(xiàn),問題的多少和系統(tǒng)的復雜度呈正比,而且不僅是線性正比,還可能呈級數(shù)正比,此時就越來越難做技術決定。但是有一些資深的工程師開始站出來挑戰(zhàn)這些問題,有的基于業(yè)務分析給出平衡的方案,有的開始嘗試設計更高級的技術,有的開始設計更靈活的系統(tǒng),有的則開始簡化和輕量化整個系統(tǒng)……這些高智商、經驗足、不怕難的工程師們引領著整個行業(yè)前行。他們就是架構師!

感覺Bob大叔的系列著作好像也在走這個過程,《代碼整潔之道》教你寫出易讀、可擴展、可維護、可重用的代碼,《代碼整潔之道:程序員的職業(yè)素養(yǎng)》教你怎樣變成一個有修養(yǎng)的程序員,而《架構整潔之道》基本上是在描述軟件設計的一些理論知識?!都軜嬚麧嵵馈反篌w分成三個部分:編程范式(結構化編程、面向對象編程和函數(shù)式編程),設計原則(主要是SOLID),以及軟件架構(其中講了很多高屋建翎的內容)。總體來說,這本書中的內容可以讓你從微觀(代碼層面)和宏觀(架構層面)兩個層面對整個軟件設計有一個全面的了解。

但是,如果你想從這本書里找到一些可以立馬解決具體問題的工程架構和技術,恐怕你會感到失望。這本書中更多的是一些基礎的理論知識,看完后你可能會比較“無感”,因為這些基礎知識對于生活在這個高速發(fā)展的喜歡快餐文化的社會中的人來說,可能很難理解其中的價值——大多數(shù)人的目標不是設計出一個優(yōu)質的軟件或架構,而是快速地解決一個具體的問題,完成自己的工作。然而,可能只有你碰過足夠多的壁,掉過足夠多的坑,經歷過足夠多的痛苦后,再來讀這本書時,你才會發(fā)現(xiàn)本書中的這些“陳舊的知識”是多么充滿智慧。而且,如果有一天,你像我這個老家伙一樣,看到今天很多很多公司和年輕的程序員還在不斷地掉坑和掙扎,你就會明白這些知識的重要性了。

我個人覺得,這本書是架構方面的入門級讀物,但也并不適合經驗不足的人員學習,這本書更適合的讀者群是,有3~5年編程經驗、需要入門軟件設計和架構的工程師或程序員。

最后,我想留下一個觀點和一組問題。

觀點:無論是微觀世界的代碼,還是宏觀層面的架構,無論是三種編程范式還是微服務架構,它們都在解決一個問題——分離控制和邏輯。所謂控制就是對程序流轉的與業(yè)務邏輯無關的代碼或系統(tǒng)的控制(如多線程、異步、服務發(fā)現(xiàn)、部署、彈性伸縮等),所謂邏輯則是實實在在的業(yè)務邏輯,是解決用戶問題的邏輯。控制和邏輯構成了整體的軟件復雜度,有效地分離控制和邏輯會讓你的系統(tǒng)得到最大的簡化。

問題:如果你要成為一名架構師,你需要明確地區(qū)分幾組詞語(如何區(qū)分它們正是留給你的問題),否則你不可能成為一名合格的工程師或架構師。這幾組詞語是簡單vs.簡陋、平衡vs.妥協(xié)、迭代vs.半成品。如果你不能很清楚地定義出其中的區(qū)別,那么你將很難做出正確的決定,也就不可有成為一名優(yōu)秀的工程師或架構師。

我相信這個觀點和這組問題將有助于你更好地閱讀并理解這本書,也會讓你進行更多的思考,帶著思考讀這本書,會讓你學到更多!

陳皓

(@左耳朵耗子)



推薦序二

久遠的教誨,古老的智慧

如果讓你接手一套不穩(wěn)定但要緊的在線系統(tǒng),這套系統(tǒng)還有各種問題:變量命名非常隨意,依賴邏輯錯綜復雜,層次結構亂七八糟,部署流程一塌糊涂,監(jiān)控系統(tǒng)一片空白……你該怎么辦?

前幾年我就遇到了這種問題,我對著頻發(fā)的故障仔細觀察,發(fā)現(xiàn)了最關鍵的問題:如果放著不動,這套系統(tǒng)的核心功能還是相對穩(wěn)定的,但經常會有一些外圍需求要開發(fā),這時由于原有的依賴邏輯和層次結構不夠清楚,就會導致“牽一發(fā)而動全身”的情況,加上測試不完善,所以幾乎每次外圍功能上線更新,核心功能都會受影響,然后又要重復好幾次“調試→改正→上線”的流程。

怎么辦?大家說了很多辦法:把單元測試都補全,重構代碼拆分核心功能和非核心功能,跟業(yè)務方談暫停需求……這些辦法都很對,但是,都需要時間才能見效,而我們最缺的就是時間。

我提了一個很“笨”的辦法:把所有“共享變量”都抽到Redis中進行讀寫,消滅本地副本,然后把穩(wěn)定版本程序多部署幾份,這樣就可以多啟動幾個實例,將這些實例標記為AB兩組。同時,在前面搭建代理服務,用于分流請求——核心功能請求分配到A組(程序基本不更新),外圍功能請求分配到B組(程序按業(yè)務需求更新)。這樣做看起來有點多此一舉——AB兩組都只有部分代碼提供服務,而且要通過Redis共享狀態(tài),但是卻實現(xiàn)了無論B組的程序如何更新,都不會影響A組所承載的核心服務的目的。

雖然當時不少人說“怎么能這樣玩呢”,但它確實有效。當天部署,當天生效,在線服務迅速穩(wěn)定下來,即便新開發(fā)的外圍功能有問題,核心服務也不受任何影響。這樣業(yè)務人員滿意了,開發(fā)人員也可以安心對系統(tǒng)做改造了。

后來有不少人問我是怎么想到這個辦法的,答案是:因為我是個老程序員,成長在面向對象的年代,運用SOC(關注點分離)、SRP(單一職責原則)、OCP(開閉原則)這些東西對我來說就如同本能。具體到這個例子,無非就是識別關注點、隔離責任、保持核心關注點的封閉而已。

后來我才知道,我提出的這個方法有個專門的名字叫“藍綠部署”。當然我自認是個老程序員,不懂這些新鮮概念也不太要緊。確實,如今不少程序員已經不認識SOC、SRP、OCP、LSP等“古老”的玩意了,大家熟悉的是各種語言、類庫、框架、代碼托管網站。互聯(lián)網開發(fā)場景千變萬化,技術一日千里,而面向對象在不少人的腦海里早就是棄之不用的老古董了。只有“老一輩”的程序員還記得那些古老的教誨,守著那些古拙的技巧。但是這些東西,總有一天會被時代淘汰嗎?

實際上,這也是我初讀《架構整潔之道》的疑惑。雖然Bob大叔這個名字對我們這些“老程序員”來說可謂如雷貫耳,之前針對一般性軟件開發(fā)所著的《代碼整潔之道》和《代碼整潔之道:程序員的職業(yè)素養(yǎng)》也確實很受歡迎,但如今寫架構,還從結構化編程、面向對象編程、函數(shù)式編程寫起,還花時間解釋SRP、OCP、LSP等原則,實在難掩“古老”的感覺。請問,它們和如今的“架構”有什么關系嗎?

不過,如果你耐心讀下去就會發(fā)現(xiàn),還真有關系。按照Bob大叔的說法,所謂架構就是“用最小的人力成本來滿足構建和維護系統(tǒng)需求”的設計行為。以前的面向對象系統(tǒng)和如今的分布式系統(tǒng),在這一點上是完全一致的。聽取久遠的教誨,尊重古老的智慧,如今的架構師也會從中受益。不信?我們就拿經典的三個編程范式來舉例,看看這些“老掉牙”的玩意兒和如今的架構設計有什么關聯(lián)。

大家對結構化編程的一般理解是,由if-else、switch-case之類的語句組織程序代碼的編程方式,它杜絕了goto導致的混亂。但是從更深的層次上看,它也是一種設計范式,避免隨意使用goto,使用if-else、switch-case之類控制語句和函數(shù)、子函數(shù)組織起來的程序代碼,可以保證程序的結構是清楚的,自頂向下層層細化,消滅了雜錯,杜絕了混淆。

聯(lián)系如今的分布式系統(tǒng),我們在設計的時候,真的能夠做到自頂向下層層細化嗎?有多少次,我看到的系統(tǒng)設計圖里,根本沒有“層次”的概念,各個模塊沒有一致的層次劃分,與子系統(tǒng)交互的不是子系統(tǒng),而是一盤散沙式的接口,甚至接口之間隨意互調、關系亂成一團麻的情況也時常出現(xiàn),帶來的就是維護和調試的噩夢。吹散歷史的迷霧,不正是古老的goto陷阱的再現(xiàn)嗎?

大家對面向對象編程的一般理解是,由封裝、繼承、多態(tài)三種特性支持的,包含類、接口等若干概念的編程方式。但是從更深的層次上看,它也是一種設計范式。多態(tài)大概算其中最神奇的特性了,程序員在確定接口時做好抽象,代碼就可以很靈活,遇到新情況時,新寫一個實現(xiàn)就可以無縫對接。

聯(lián)系如今的分布式系統(tǒng),我們在設計的時候,真的能夠做到接口足夠抽象、新模塊能無縫對接嗎?有多少次,我看到接口的設計非常隨意,接口不是基于行為而是基于特定場景的實現(xiàn),沒有做適當?shù)某橄螅矝]有為未來預留空間,直接導致契約僵硬死板。每新增一種終端呈現(xiàn)形式,整個內容生產流程就要大動干戈,這樣的例子并不罕見。抹去歷史的塵埃,這不正是“多態(tài)”出現(xiàn)之前的困境嗎?

大家對函數(shù)式編程的一般理解是,以函數(shù)為基本單元,沒有變量(更準確地說是不能重復賦值)也沒有副作用的編程方式。但是從更深的層次上看,它徹底隔離了可變性,變量或者狀態(tài)默認就是不可變的,如果要變化,則必須經過合理設計的專門機制來實現(xiàn)。所以,它也避免了死鎖、狀態(tài)沖突等眾多麻煩。

聯(lián)系如今的分布式系統(tǒng),我們在設計的時候,真的能夠徹底隔離可變性、避免狀態(tài)沖突嗎?有多少次,我看到狀態(tài)或變量的修改接口大方暴露,被不經意(或者惡意)修改,導致奇怪的故障。Bob大叔舉了一個相當有趣的例子,如果又要保證操作原子性又要能精確還原各時刻的狀態(tài),有個辦法是這樣的:只提供CR操作,而不提供完整的CRUD操作(就像MySQL的binlog那樣)。平時只要追加操作記錄即可,各時刻的狀態(tài)永遠通過重放之前的操作記錄得出,這樣就徹底避免了狀態(tài)的錯亂。這個辦法看起來古怪,但我真的在之前的開發(fā)中用過(當然是在程序生命周期有限的場景下),而且真的從沒出過錯。

坦白說,看完《架構整潔之道》這本書,我心里好受點了。因為我發(fā)現(xiàn),我們這些老程序員的知識其實沒有過時,如今不少光鮮的架構其實要解決的還是那些古老的問題。多虧了Bob大叔的妙手點撥,我才能穿越時空,享受到“重新發(fā)現(xiàn)智慧”的愉悅。

當然,架構設計是一門復雜的學問,要綜合考慮編碼、質量、部署、發(fā)布、運維、排障、升級等等各種因素,做出權衡。好消息是,Bob大叔的這本書覆蓋面廣,涉及各個方面,相信你認真讀完全書一定會和我一樣有不小的收獲。唯一的問題是,你要適應這個老程序員的口吻和節(jié)奏:他當然也會拿如今流行的打車系統(tǒng)做例子,但他更熟悉的還是鏈接器、C語言、UML圖等玩意。

不過我覺得,這都不是大問題。看得出類之間的依賴關系不合理,自然容易發(fā)現(xiàn)子系統(tǒng)之間的依賴關系不合理;搞得懂UNIX如何巧妙定義通用的IO設備,自然容易想到對PC Web、Mobile Web、App內的頁面做適當抽象;認得清各線程、進程、鏈接庫的職責,自然容易明白微服務也需要避免跨邊界調用。更妙的是,從這種古老的視角看問題,往往更能擺脫細節(jié)的困擾,把握問題的核心。就像老子說的那樣:治大國如烹小鮮。

噢,對了,“治大國如烹小鮮”也是久遠的教誨,也包含著古老的智慧。

余 晟

公眾號“余晟以為”(yurii-says)作者

現(xiàn)在滬江教育集團擔任平臺架構部負責人


查看全部↓

前言/序言

序言

軟件架構(architecture)究竟是什么?

不論從哪個角度分析軟件系統(tǒng),都不可能面面俱到。如果從架構學角度來分析,在一定程度上能夠做到抓大放小,把握住重點,但是也不可避免地會錯失某些重要的細節(jié)信息。

軟件架構學關注的的一個重點是組織結構(structure)。不管是討論組件(Component)、類(Class)、函數(shù)(Function)、模塊(Module),還是層級(Layer)、服務(Service)以及微觀與宏觀的軟件開發(fā)過程,軟件的組織結構都是我們的主要關注點。但是真實世界中的許多軟件項目并不完全按照我們的信念和愿望生長——它們就像超大型國企那樣,層層嵌套,纏繞成一團亂麻 。有的時候真的很難相信,軟件項目的組織結構性也能像物理建筑那樣一目了然,層次清晰。

物理建筑,不管其地基是石頭還是水泥,形狀是高大還是寬闊,風格是氣勢恢宏還是小巧玲瓏,其組織結構都一目了然。物理建筑的組織結構必須遵守“受重力”這一自然規(guī)律,同時還要符合建筑材料自身的物理特性。軟件項目則沒有定律可以遵循。另外,物理建筑是用磚頭、水泥、木頭、鋼鐵或者玻璃等標準材料建成的,而大型軟件項目往往是由小的軟件組件構成的,這些軟件組件又是由更小的軟件組件構成的,層層堆疊,無窮無盡。


架構整潔之道的評論 (共 條)

分享到微博請遵守國家法律
云浮市| 武鸣县| 商丘市| 张家川| 基隆市| 景谷| 通州市| 大同县| 馆陶县| 锡林郭勒盟| 洞头县| 庆元县| 康平县| 咸阳市| 息烽县| 安化县| 新沂市| 焦作市| 都匀市| 阜康市| 双鸭山市| 孝昌县| 涿州市| 玉环县| 雷州市| 北辰区| 禹州市| 吴堡县| 昭觉县| 恭城| 方正县| 故城县| 延吉市| 通许县| 剑河县| 启东市| 嘉祥县| 斗六市| 北海市| 丰县| 屏东县|