O'Reilly: 語義軟件設(shè)計(jì)
定 價(jià):98 元
為什么有如此之多的軟件項(xiàng)目都以失敗告終?本書的作者是一名資深的首席架構(gòu)師兼CTO,他在本書中介紹了一種全新的軟件架構(gòu)理論與實(shí)踐方法。語義設(shè)計(jì)打破傳統(tǒng)思想,重新定義了軟件架構(gòu):為構(gòu)建強(qiáng)大、靈活及可擴(kuò)展系統(tǒng)而構(gòu)思概念的過程。
本書概述了語義軟件設(shè)計(jì)的核心實(shí)踐,并提出了一套完整的架構(gòu)實(shí)踐工具包,其中包括一組實(shí)踐模式和模板。架構(gòu)師、系統(tǒng)設(shè)計(jì)師、軟件開發(fā)經(jīng)理、CTO和CIO可以通過本書學(xué)習(xí)如何創(chuàng)建有效且全面的架構(gòu)與技術(shù)計(jì)劃,從而提高項(xiàng)目的成功率。
前言感謝你選擇這本書。歡迎你的閱讀。本書介紹了一種設(shè)計(jì)軟件的新方法。提出了一種思考如何構(gòu)建軟件的新方式。本書主要面向大型項(xiàng)目,特別是新建的軟件項(xiàng)目,或大規(guī)模舊系統(tǒng)的現(xiàn)代化改造項(xiàng)目。如果軟件未能控制在預(yù)算范圍內(nèi),未能在計(jì)劃時(shí)間內(nèi)交付,或沒有按照承諾交付功能,則可以稱為失敗。然而,軟件項(xiàng)目的失敗比率非常高,這一點(diǎn)毫無爭(zhēng)議,而且有據(jù)可查。在過去二十年間,這種情況越演越烈。為了軟件設(shè)計(jì)更加成功,我們必須尋求不同的出路。但是出路在哪里呢?假設(shè)你正在制作業(yè)務(wù)應(yīng)用程序軟件和服務(wù),并作為產(chǎn)品出售給客戶,或者在某家公司內(nèi)部的IT 部門工作。本書不涉及導(dǎo)彈制導(dǎo)系統(tǒng)、電話通信系統(tǒng)或固件,也無意討論面向?qū)ο笈c函數(shù)式編程,而且也沒有興趣討論任何流行的框架。需要說明一點(diǎn),書中提到的語義源自我接受過的哲學(xué)思想教育,因此指的是符號(hào)。我們這里所說的語義與蒂姆·伯納斯- 李提出的語義網(wǎng)沒有任何關(guān)系。本書面向的讀者主要包括CTO、CIO、工程副總裁、各行各業(yè)的架構(gòu)師(無論是企業(yè)、應(yīng)用程序、解決方案還是其他方面)、軟件開發(fā)經(jīng)理和立志成為架構(gòu)師的高級(jí)開發(fā)人員。此外,技術(shù)領(lǐng)域的任何人,包括測(cè)試人員、分析師和高管都可以從本書中受益。書中的代碼很少。希望經(jīng)理、領(lǐng)導(dǎo)、有求知欲的高管,以及軟件項(xiàng)目的從業(yè)人員能夠在閱讀本書后,理解并接受主要內(nèi)容。對(duì)于本書提出的觀點(diǎn),有些人可能會(huì)對(duì)感到驚訝,有些人甚至可能會(huì)感到憤怒。這些觀點(diǎn)看起來很新穎,而且對(duì)于某些人來說非常陌生,但實(shí)際上這些觀點(diǎn)借鑒了《設(shè)計(jì)思維導(dǎo)論》。我根據(jù)多年的經(jīng)驗(yàn),并結(jié)合多方面的信息,總結(jié)出了一套方法;舅枷氪蠖嘣醋晕以谧x研時(shí)期對(duì)于哲學(xué)的研究。本書概述了語義設(shè)計(jì)的思想、流程、實(shí)踐、模板和實(shí)用方法。這種軟件設(shè)計(jì)方法已經(jīng)過檢驗(yàn),實(shí)證有效。在過去的二十年里,我有幸與很多大型全球上市企業(yè)的CTO、CIO、首席架構(gòu)師合作,設(shè)計(jì)并領(lǐng)導(dǎo)創(chuàng)建了許多大型的重要軟件項(xiàng)目,并贏得了多個(gè)創(chuàng)新獎(jiǎng)項(xiàng)。更重要的是,我們創(chuàng)建了成功的軟件。從某種意義上來說,本書中提出的思想代表了我設(shè)計(jì)軟件的方式。我采用這種方法已經(jīng)十多年了,以此領(lǐng)導(dǎo)了大大小小的軟件項(xiàng)目設(shè)計(jì)。雖然與傳統(tǒng)的軟件設(shè)計(jì)思維方式截然不同,但我的這套思想并非無本之木,也不是紙上談兵,而是已經(jīng)得到了證實(shí),確實(shí)有效。在軟件設(shè)計(jì)中,我們不得不使用前人留下來的專業(yè)術(shù)語。但在本書中,有時(shí)我會(huì)在架構(gòu)師或架構(gòu)上劃上刪除線,比如像這樣:架構(gòu)師。意思是說,雖然迫于歷史的原因,我不得不在交流中使用這些專業(yè)術(shù)語,但它們?cè)诋?dāng)前上下文所表示的含義并不準(zhǔn)確。本書的第一篇介紹了該方法的理念框架。我們介紹了希望解決的問題以及原因。這部分內(nèi)容大多是概念講解,為后面的章節(jié)提供了理論基礎(chǔ)。本書的第二篇的內(nèi)容非常務(wù)實(shí)。我們介紹了一系列文檔模板和可重復(fù)的實(shí)踐,可在日常工作中使用。本書的第三篇概述了管理軟件以及控制軟件混亂程度的一些方式。最Z后以一份宣言結(jié)尾,簡(jiǎn)明扼要地總結(jié)了構(gòu)成該方法的一系列原則和實(shí)踐。總的來說,本書介紹了一套理論框架以及實(shí)踐的方法。然而,這套理論并不是一成不變的,我在這里拋磚引玉,希望將來能夠進(jìn)一步提煉和改進(jìn)。本書的創(chuàng)作源于對(duì)軟件和寫作的熱愛。希望你能喜歡本書,并將這些方法應(yīng)用到實(shí)際的工作中。如果你對(duì)于這套理論有任何看法或建議,請(qǐng)聯(lián)系我們:eben@aletheastudio.com 或AletheaStudio.com。排版約定本書使用了下述排版約定。斜體(Italic)表示新術(shù)語、URL、電子郵件地址、文件名和擴(kuò)展名。等寬字體(Constant Width)表示程序片段,以及正文中出現(xiàn)的變量、函數(shù)名、數(shù)據(jù)庫(kù)、數(shù)據(jù)類型、環(huán)境變量、語句和關(guān)鍵字等。等寬粗體字(Constant width bold)表示命令或其他用戶輸入的文本。等寬斜體字(Constant Width Italic)表示該文本應(yīng)當(dāng)由用戶提供的值或由用戶根據(jù)上下文決定的值替換。使用代碼示例你可以通過如下鏈接下載本書的補(bǔ)充材料( 代碼示例, 練習(xí)等):https://aletheastudio.com。本書的目的是幫助你完成工作。一般來說,你可以在自己的程序或者文檔中使用本書附帶的示例代碼。你無需聯(lián)系我們獲得使用許可,除非你要復(fù)制大量的代碼。例如,使用本書中的多個(gè)代碼片段編寫程序就無需獲得許可。但以CD-ROM 的形式銷售或者分發(fā)OReilly 書中的示例代碼則需要獲得許可;卮饐栴}時(shí)援引本書內(nèi)容以及書中示例代碼,無需獲得許可。在你自己的項(xiàng)目文檔中使用本書大量的示例代碼時(shí),則需要獲得許可。我們不強(qiáng)制要求署名,但如果你這么做,我們深表感激。署名一般包括書名、作者、出版社和國(guó)際標(biāo)準(zhǔn)圖書編號(hào)。例如:Semantic Software Design by Eben Hewitt(OReilly). Copyright 2020 Eben Hewitt, 978-1-492-04595-3。如果你覺得自身情況不在合理使用或上述允許的范圍內(nèi),請(qǐng)通過郵件和我們聯(lián)系,地址是 permissions@oreilly.com。OReilly 在線學(xué)習(xí)平臺(tái)(OReilly Online Learning)近40 年來,OReilly Media 致力于提供技術(shù)和商業(yè)培訓(xùn)、知識(shí)和卓越見解,來幫助眾多公司取得成功。我們擁有獨(dú)一無二的專家和革新者組成的龐大網(wǎng)絡(luò),他們通過圖書、文章、會(huì)議和我們的在線學(xué)習(xí)平臺(tái)分享他們的知識(shí)和經(jīng)驗(yàn)。OReilly 的在線學(xué)習(xí)平臺(tái)允許你按需訪問現(xiàn)場(chǎng)培訓(xùn)課程、深入的學(xué)習(xí)路徑、交互式編程環(huán)境,以及OReilly 和200 多家其他出版商提供的大量文本和視頻資源。有關(guān)的更多信息,請(qǐng)?jiān)L問http://oreilly.com。聯(lián)系我們請(qǐng)把對(duì)本書的評(píng)價(jià)和問題發(fā)給出版社。美國(guó):OReilly Media, Inc.1005 Gravenstein Highway NorthSebastopol, CA 95472中國(guó):北京市西城區(qū)西直門南大街2號(hào)成銘大廈C座807室(100035)奧萊利技術(shù)咨詢(北京)有限公司這本書有專屬網(wǎng)頁,你可以在那兒找到本書的勘誤、示例和其他信息。網(wǎng)址是:https://oreil.ly/semantic-software-design。如果你對(duì)本書有一些評(píng)論或技術(shù)上的建議,請(qǐng)發(fā)送電子郵件到errata@oreilly.com。要了解OReilly 的圖書和培訓(xùn)課程的新聞和信息,請(qǐng)?jiān)L問我們的網(wǎng)站,地址是:http://www.oreilly.com。我們的Facebook:http://facebook.com/oreilly。我們的Twitter:http://twitter.com/oreillymedia。我們的Youtube:http://www.youtube.com/oreillymedia。致謝我要感謝具有敏銳洞察力的Mike Loukides,感謝你的指導(dǎo)和鼓勵(lì)幫助我提煉出了這些理念,并完成了本書的創(chuàng)作。很榮幸能夠與你共事,感謝你為推進(jìn)我們的領(lǐng)域所做的一切。感謝OReilly 的開發(fā)編輯,勤勤懇懇、一絲不茍的Alicia Young。在本書的創(chuàng)作過程中,我們之間的合作非常愉快,感謝你的付出以及提出的寶貴意見。很高興與你合作。感謝Mary Treseler、Neal Ford、Chris Guzikowski 以及OReilly 的整個(gè)軟件架構(gòu)會(huì)議團(tuán)隊(duì)。感謝你們提供的場(chǎng)地為我?guī)砹诉M(jìn)一步探索和挑戰(zhàn)這些理念的空間和氛圍。感謝Tim OReilly,感謝OReilly Media。感謝Sabre 出色的企業(yè)架構(gòu)團(tuán)隊(duì)。Andrea Baylor、Andy Zecha、Holt Hopkins、Jerry Rossi、Tom Murray 還有Tom Winrow,很榮幸能與你們共事,我們共同創(chuàng)造了這些優(yōu)雅、嚴(yán)謹(jǐn)?shù)南到y(tǒng)。感謝Jonathan Haynes 審閱早期的草稿,并提出了有關(guān)本書的修改意見。感謝Clinton Anderson 和Justin Ricketts,感謝二位給予的支持。感謝我的父母,感謝你們激發(fā)了我寫作的興趣。感謝我的老師們,特別是Christine Ney 和Bryan Short。非常感謝你們的諄諄教誨。感謝Alison Brown,感謝你貢獻(xiàn)了許多重要的想法,感謝你給予本書的支持。本書得以付梓,離不開你付出的一切努力。
Eben Hewitt是一家全球企業(yè)SaaS公司的首席架構(gòu)師兼CTO。曾出版《Technology Strategy Patterns: Architecture as Strategy》、《Cassandra: The Definitive Guide》等多部有關(guān)架構(gòu)、服務(wù),以及軟件開發(fā)的書籍。
目錄前言 .1第一篇 設(shè)計(jì)理念第1 章 軟件架構(gòu)的起源 91.1 軟件的概念起源 .91.2 復(fù)制與創(chuàng)新 . 151.3 為什么軟件項(xiàng)目會(huì)失敗 171.4 失敗的影響 . 20第2 章 概念的產(chǎn)生 .222.1 語義與軟件工廠 222.2 需求的神話 . 242.3 語義與軟件架構(gòu) 252.4 語義領(lǐng)域 272.5 設(shè)計(jì)就是概念生成 282.6 什么是概念? 302.6.1 達(dá)成、避免和修復(fù) 312.6.2 擬定概念的大綱 322.7 通過設(shè)計(jì)圖冊(cè)記錄想法 362.8 契合目標(biāo) 382.9 通過總體構(gòu)圖傳達(dá)概念 392.9.1 示例 412.9.2 從其他角度考慮總體構(gòu)圖 422.9.3 總體構(gòu)圖基于一系列發(fā)現(xiàn) 422.10 理解理念 442.10.1 感性確定性 442.10.2 元認(rèn)知 452.11 上下文 . 472.12 集合 . 492.13 語義設(shè)計(jì)的優(yōu)勢(shì) . 52第3 章 解構(gòu)與設(shè)計(jì) .553.1 解構(gòu)簡(jiǎn)介 553.2 簡(jiǎn)單的復(fù)雜 . 593.3 構(gòu)造與解構(gòu) . 613.4 功能可供性 . 633.5 賦予負(fù)空間意圖和使用價(jià)值 653.6 設(shè)計(jì)決策至少具備兩個(gè)正當(dāng)理由 683.7 多角度設(shè)計(jì) . 693.8 創(chuàng)建隔離區(qū)或大使館 . 703.9 容錯(cuò)設(shè)計(jì) 703.10 設(shè)計(jì)語言 713.11 從用戶的對(duì)立面著手 723.12 平臺(tái) . 72第二篇 語義設(shè)計(jì)實(shí)踐第4 章 設(shè)計(jì)思維 774.1 為什么采用設(shè)計(jì)思維? 774.2 探索設(shè)計(jì)思維 784.2.1 原則 794.2.2 方法 804.3 實(shí)施設(shè)計(jì)思維方法 874.4 小結(jié) 90第5 章 語義設(shè)計(jì)的實(shí)踐與成果物 915.1 設(shè)計(jì)原則 925.2 結(jié)對(duì)設(shè)計(jì) 945.3 墻繪 955.4 愿景盒 985.5 思維導(dǎo)圖 995.6 用例 . 1005.7 準(zhǔn)則與約定 1025.7.1 utils 1035.7.2 domain 1035.7.3 service-api. 1045.7.4 service-impl . 1045.7.5 service-client 1045.8 方法 . 1055.9 設(shè)計(jì)定義文檔 . 1065.10 立場(chǎng)文件 . 1175.11 RAID . 1185.12 演示文稿和多個(gè)角度 1205.13 小結(jié) 121第6 章 業(yè)務(wù) 1226.1 捕獲業(yè)務(wù)戰(zhàn)略 . 1256.1.1 提供統(tǒng)一認(rèn)識(shí) . 1266.1.2 戰(zhàn)略目標(biāo)與戰(zhàn)術(shù)需求的統(tǒng)一 1276.2 框架介紹 1296.3 創(chuàng)建業(yè)務(wù)術(shù)語表 1306.4 創(chuàng)建組織圖 1306.5 創(chuàng)建業(yè)務(wù)能力模型 1316.6 創(chuàng)建流程圖 1346.7 重新設(shè)計(jì)流程 . 1346.8 盤點(diǎn)系統(tǒng) 1366.9 定義指標(biāo) 1376.10 適當(dāng)?shù)墓芾?1386.11 應(yīng)用程序中的業(yè)務(wù)架構(gòu) 1386.12 小結(jié) 141第7 章 應(yīng)用程序 1437.1 接納約束 1437.2 解耦用戶界面 . 1457.3 平臺(tái)設(shè)計(jì) 1467.4 服務(wù)的資源和表示 1487.5 API 準(zhǔn)則 1517.6 解構(gòu)版本編號(hào)規(guī)則 1527.7 可緩存性和冪等性 1547.8 可獨(dú)立構(gòu)建 1557.9 策略模式與可配置服務(wù) . 1557.10 特定于應(yīng)用程序的服務(wù) 1577.11 通過服務(wù)通信 1587.12 對(duì)外公開 . 1587.13 彈性設(shè)計(jì) . 1597.14 交互式文檔 1617.15 服務(wù)的結(jié)構(gòu) 1627.15.1 UI 軟件包 1627.15.2 編排 1637.15.3 引擎 1657.15.4 數(shù)據(jù)訪問器 1697.16 事件處理 . 1697.17 上下文服務(wù)與服務(wù)混合 1727.18 性能提升檢查列表 . 1747.19 API 與實(shí)現(xiàn)的分離 . 1757.20 語言 1767.21 不變性 . 1777.22 規(guī)格 1797.23 自動(dòng)測(cè)試 . 1837.24 注釋 1837.25 小結(jié) 185第8 章 數(shù)據(jù) 1868.1 業(yè)務(wù)術(shù)語表 1868.2 語義數(shù)據(jù)建模策略 1878.3 多種多樣的持久層 1908.4 多重建模 1928.5 流數(shù)據(jù)模型 1948.6 機(jī)器學(xué)習(xí)的特征工程 1968.7 Classpath 部署與網(wǎng)絡(luò)代理 1988.8 點(diǎn)對(duì)點(diǎn)持久存儲(chǔ) 1998.9 圖數(shù)據(jù)庫(kù) 2018.10 數(shù)據(jù)流水線 2048.11 機(jī)器學(xué)習(xí)數(shù)據(jù)流水線 2068.12 元數(shù)據(jù)與服務(wù)指標(biāo) . 2098.13 審計(jì) 2108.14 ADA 合規(guī)性 2108.15 小結(jié) 211第9 章 基礎(chǔ)設(shè)施 2129.1 架構(gòu)師的考慮因素 2129.2 開發(fā)運(yùn)維 2149.3 基礎(chǔ)設(shè)施即代碼 2169.4 指標(biāo)優(yōu)先 2189.5 關(guān)注自動(dòng)化流水線 2209.6 生產(chǎn)的多元宇宙與特性開關(guān) 2219.6.1 特性開關(guān)的實(shí)現(xiàn) 2229.6.2 多臂老虎機(jī):機(jī)器學(xué)習(xí)與無限切換 . 2249.7 基礎(chǔ)設(shè)施設(shè)計(jì)與文檔 2259.8 混沌工程 2279.9 利益相關(guān)者的多樣化與內(nèi)外用戶 . 2299.10 小結(jié) 230第三篇 運(yùn)維、流程以及管理第10 章 創(chuàng)意總監(jiān) . 23510.1 語義設(shè)計(jì)師的角色 . 23510.2 各個(gè)行業(yè)的創(chuàng)意總監(jiān) 23810.2.1 時(shí)尚界 . 23910.2.2 影視業(yè) . 24010.2.3 電子游戲業(yè) 24210.2.4 廣告業(yè) . 24210.2.5 戲劇業(yè) . 24210.2.6 科技行業(yè) . 24310.2.7 稱謂 245第11 章 管理與運(yùn)營(yíng) . 24811.1 策略與工具 24811.2 迂回策略 . 25011.3 水平思考與概念構(gòu)思 25111.4 概念測(cè)試 . 25511.5 代碼審核 . 25711.6 演示 25811.7 運(yùn)營(yíng)計(jì)分卡 25911.8 面向服務(wù)的組織 26111.9 可擴(kuò)展商業(yè)機(jī)器 26611.10 現(xiàn)代化計(jì)劃的管理 26811.11 變革管理 26911.12 管理委員會(huì) . 27211.12.1 目標(biāo) 27211.12.2 指標(biāo) 27311.12.3 服務(wù)組合 27411.12.4 服務(wù)目錄與元數(shù)據(jù) 27411.13 服務(wù)設(shè)計(jì)清單. 27611.13.1 服務(wù)設(shè)計(jì) 27611.13.2 服務(wù)運(yùn)營(yíng) 27711.13.3 業(yè)務(wù)流程 27811.13.4 數(shù)據(jù) 27811.13.5 錯(cuò)誤 27911.13.6 性能 27911.13.7 安全 27911.13.8 質(zhì)量保證 28011.13.9 可用性與支持 28011.13.10 部署 . 28111.13.11 文檔 28111.14 有關(guān)組織設(shè)計(jì)的延伸閱讀 282第12 章 語義設(shè)計(jì)宣言 283附錄A 語義設(shè)計(jì)工具集 295附錄B 延伸閱讀 298