軟件架構(gòu):Python語言實現(xiàn)
定 價:79 元
叢書名:架構(gòu)師書庫
- 作者:[印度] 阿南德·巴拉錢德拉·皮萊
- 出版時間:2018/3/1
- ISBN:9787111590941
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP311.561
- 頁碼:
- 紙張:膠版紙
- 版次:1
- 開本:16開
本書首先解釋如何利用Python語言實現(xiàn)應用軟件架構(gòu),讓你逐步理解什么是架構(gòu)級的需求以及如何確定這些需求;然后,你可以獲得對架構(gòu)不同質(zhì)量屬性的完整理解,這些質(zhì)量屬性包括可修改性、可測試性、可擴展性、可部署性和安全性等,從而幫助架構(gòu)師構(gòu)建滿足業(yè)務需求的軟件架構(gòu)產(chǎn)品。
前言
軟件架構(gòu),可以說是為特定的應用軟件創(chuàng)建一個藍圖設計。軟件架構(gòu)中存在兩大挑戰(zhàn):首先,軟件架構(gòu)與需求必須保持一致,對尚未發(fā)現(xiàn)的需求或者發(fā)生演化的需求都是如此;其次,盡管常常發(fā)生架構(gòu)實現(xiàn)的變更,但軟件架構(gòu)與其對應的架構(gòu)實現(xiàn)必須保持一致。
本書包含很多示例和用例,通過這種直觀的方法來幫助你獲取成為一名成功的軟件架構(gòu)師所需的一切。本書將幫助你了解Python的來龍去脈,以便可以用Python來構(gòu)建和設計高度可擴展的、健壯的、簡潔的、性能強大的應用程序。
主要內(nèi)容
第1章介紹了軟件架構(gòu)的核心思想,簡要介紹了架構(gòu)質(zhì)量屬性和一些隱含的原理。這將使你能夠在軟件架構(gòu)原理和基本屬性方面擁有良好的知識基礎。
第2章包括開發(fā)中軟件架構(gòu)的可修改性和可讀性。它將幫助你深入理解架構(gòu)的可維護性等質(zhì)量屬性,并獲得用Python編寫代碼來測試應用程序的各種技巧和策略。
第3章幫助你理解軟件架構(gòu)的可測試性,以及如何為Python應用程序構(gòu)建架構(gòu)以滿足可測試性。你還將了解可測試性和軟件測試的各個方面,以及Python中可用的各種庫和模塊,以便編寫各種可測試的應用程序。
第4章討論了在編寫Python代碼過程中關于性能的方方面面。你不僅可以學習架構(gòu)性能的基本知識,還可以掌握在何時何地需要進行性能優(yōu)化。例如,你會學習到何時進行SDLC的性能優(yōu)化。
第5章不僅闡述了編寫可擴展應用程序的重要性,還討論了實現(xiàn)應用程序可擴展性的各種不同方法,并論述了如何利用Python來實現(xiàn)各種可擴展性技術。你不僅能學到可擴展性的理論方面的知識,還能學到業(yè)界的最佳實踐。
第6章討論了架構(gòu)安全性的方方面面,并使你掌握一些最佳實踐和技巧來編寫安全性高的應用程序。你會了解在Python架構(gòu)應用程序中可能出現(xiàn)的各種不同的安全問題,以及Python是如何從頭開始保障安全性的。
第7章從程序員實用性的角度,簡要論述了Python中出現(xiàn)的各種設計模式以及每個模式的理論背景。這些設計模式對程序員來說是非常實用的。
第8章從較高抽象層次角度介紹Python中現(xiàn)有的架構(gòu)模式,同時給出了幾個示例,用來說明如何利用Python庫和框架來實現(xiàn)基于這些模式的高層次架構(gòu)問題的解決方法。
第9章討論如何正確地在遠程環(huán)境中或云上使用Python輕松部署代碼的方方面面。
第10章討論了一些Python代碼調(diào)試技術,包括最簡單實用的打印語句、日志記錄和系統(tǒng)調(diào)用跟蹤機制等,這些對程序員來說都是非常容易獲得的,也有助于系統(tǒng)架構(gòu)師指導他的團隊。
閱讀本書需要準備什么
為運行本書中展示的大部分代碼示例,需要在系統(tǒng)中安裝Python 3。其他的預備知識會在相應的實例中提到。
本書的讀者對象
本書適用于有經(jīng)驗的Python開發(fā)人員,他們渴望成為企業(yè)級應用程序的架構(gòu)師;本書也適用于軟件架構(gòu)師,他們希望利用Python的特長來創(chuàng)建更有效的應用程序藍圖。
約定
書中的代碼塊設置如下:
當希望重點關注代碼塊的某個特定部分時,會將相關的行(line)或項(item)設置成粗體:
任何命令行輸入或輸出寫成如下形式:
新術語和重要詞匯以粗體形式表示。
示例代碼下載
可以從http://www.packtpub.com下載本書的示例代碼文件(需要Packt賬戶)。也可以訪問http://www.packtpub.com/support并注冊賬戶,Packt將通過email把文件直接發(fā)送給你。
可以按照以下步驟下載代碼文件:
(1)使用你的電子郵件地址和密碼注冊或登錄到我們的網(wǎng)站。
(2)將鼠標指針懸停在頂部的SUPPORT選項卡上。
(3)單擊Code Downloads & Errata選項。
(4)在Search框中輸入圖書的名稱。
(5)選擇要下載代碼文件的書。
(6)從下拉菜單中選擇本書的購買渠道。
(7)單擊Code Download下載。
你還可以單擊Packt Publishing網(wǎng)站中圖書頁面上的Code Files按鈕下載代碼文件,也可以通過在Search框中輸入圖書的名稱來訪問此頁面。請注意,你需要首先登錄Packt賬戶。
下載文件后,請確保使用這些最新版軟件來解壓縮文件或文件夾:
WinRAR / 7-Zip for Windows
Zipeg / iZip / UnRarX for Mac
7-Zip / PeaZip for Linux
該書的代碼包也由GitHub托管在https://github.com/PacktPublishing/Software-Architecture-with-Python。你還可從Packt提供的圖書和視頻目錄中獲取其他代碼包,網(wǎng)址為https://github.com/PacktPublishing/。
關于作者
Anand Balachandran Pillai是一名工程技術專家,在軟件企業(yè)有18年以上的工作經(jīng)歷,在產(chǎn)品工程、軟件設計、架構(gòu)設計和相關研究方面具有非常豐富的經(jīng)驗。
他曾獲得印度理工學院機械工程專業(yè)的學士學位。曾在Yahoo!、McAfee和Infosys等公司任職,擔任產(chǎn)品開發(fā)團隊的首席工程師。
他的主要興趣在于軟件性能工程、高可擴展性架構(gòu)、安全和開源社區(qū)等方面。他也經(jīng)常在Startups工作,擔任首席技術專家或顧問。
他還是班加羅爾Python用戶聯(lián)盟的奠基人和Python軟件協(xié)會(PSF)的會士。Anand現(xiàn)在是Yegii公司的首席架構(gòu)師。
目錄
譯者序
關于作者
關于評審人
前言
第1章 軟件架構(gòu)原理 1
1.1 軟件架構(gòu)定義 2
1.1.1 軟件架構(gòu)與設計 2
1.1.2 軟件架構(gòu)相關的幾個方面 3
1.2 軟件架構(gòu)的特征 3
1.2.1 用架構(gòu)來定義一種結(jié)構(gòu) 3
1.2.2 由架構(gòu)來挑選一組核心元素 4
1.2.3 由架構(gòu)來捕獲早期的設計決策 4
1.2.4 由架構(gòu)來管理利益相關者的需求 5
1.2.5 架構(gòu)影響著組織結(jié)構(gòu) 5
1.2.6 架構(gòu)受到環(huán)境的影響 6
1.2.7 架構(gòu)是對系統(tǒng)的文檔化 6
1.2.8 架構(gòu)通常會遵循某個模式 7
1.3 軟件架構(gòu)的重要性 7
1.4 系統(tǒng)架構(gòu)與企業(yè)架構(gòu) 8
1.5 架構(gòu)的質(zhì)量屬性 10
1.5.1 可修改性 11
1.5.2 可測試性 13
1.5.3 可擴展性 14
1.5.4 性能 15
1.5.5 可用性 16
1.5.6 安全性 17
1.5.7 可部署性 18
1.6 本章小結(jié) 19
第2章 編寫可修改可讀的代碼 20
2.1 什么是可修改性 20
2.2 與可修改性相關的幾個方面 20
2.3 理解可讀性 21
2.3.1 Python和可讀性 21
2.3.2 可讀性–反模式 22
2.4 增強可讀性的各種技術 24
2.4.1 文檔化代碼 24
2.4.2 遵守編碼和風格規(guī)范 30
2.4.3 審查和重構(gòu)代碼 31
2.4.4 注釋代碼 31
2.5 可修改性的基礎——內(nèi)聚和耦合 32
2.5.1 測量內(nèi)聚性和耦合性 33
2.5.2 字符串和文本處理 35
2.6 探索提高可修改性的策略 37
2.6.1 提供顯式接口 37
2.6.2 減少雙向依賴 37
2.6.3 抽象出公共服務 38
2.6.4 使用繼承技術 38
2.6.5 使用延遲綁定技術 42
2.7 度量——靜態(tài)分析工具 43
2.7.1 什么是代碼壞味道 43
2.7.2 圈復雜度——McCabe度量 44
2.7.3 度量結(jié)果測試 45
2.7.4 運行靜態(tài)檢查器 47
2.8 重構(gòu)代碼 53
2.8.1 降低復雜度 53
2.8.2 改善代碼壞味道 55
2.8.3 改善風格上和編碼上的問題 57
2.9 本章小結(jié) 57
第3章 可測試性——編寫可測試的代碼 58
3.1 理解可測試性 58
3.1.1 軟件可測試性及相關屬性 58
3.1.2 架構(gòu)級的方方面面 59
3.1.3 策略 60
3.2 白盒測試原理 65
3.2.1 單元測試 65
3.2.2 操作中的單元測試 66
3.2.3 單元測試模塊nose2 69
3.2.4 用py.test進行測試 70
3.2.5 代碼覆蓋 72
3.2.6 仿制一些東西 74
3.2.7 文檔中的內(nèi)聯(lián)測試——doctest 78
3.2.8 集成測試 81
3.2.9 測試自動化 83
3.3 測試驅(qū)動開發(fā) 84
3.4 有回文的TDD 85
3.5 本章小結(jié) 90
第4章 好的性能就是回報 92
4.1 什么是性能 93
4.2 軟件性能工程 93
4.3 性能測試和度量工具 94
4.4 性能復雜度 95
4.5 度量性能 96
4.5.1 使用上下文管理器度量時間 97
4.5.2 使用timeit模塊來計時代碼 99
4.5.3 使用timeit度量代碼的性能 100
4.5.4 揭示時間復雜度——各種圖 102
4.5.5 使用timeit度量CPU時間 106
4.6 剖析 107
4.6.1 確定性剖析 107
4.6.2 使用cProfile和profile進行剖析 108
4.6.3 收集和報告統(tǒng)計數(shù)據(jù) 111
4.6.4 第三方剖析器 113
4.7 其他工具 119
4.7.1 objgraph 120
4.7.2 pympler 121
4.8 程序設計性能——數(shù)據(jù)結(jié)構(gòu) 123
4.8.1 可變?nèi)萜鳌湵怼⒆值浜图? 123
4.8.2 不可變?nèi)萜鳌M 124
4.8.3 高性能容器——集合模塊 125
4.8.4 概率數(shù)據(jù)結(jié)構(gòu)——布隆過濾器 131
4.9 本章小結(jié) 134
第5章 開發(fā)可擴展的應用 136
5.1 可擴展性和性能 137
5.2 并發(fā)性 139
5.2.1 并發(fā)性與并行性 140
5.2.2 Python中的并發(fā)性——多線程機制 141
5.3 縮略圖產(chǎn)生器 141
5.3.1 縮略圖產(chǎn)生器——生產(chǎn)者/消費者架構(gòu) 143
5.3.2 縮略圖產(chǎn)生器——使用鎖的資源約束 147
5.3.3 縮略圖產(chǎn)生器——使用信號量的資源約束 150
5.3.4 資源約束——信號量和鎖比較 153
5.3.5 縮略圖產(chǎn)生器——使用條件的URL速率控制器 153
5.4 多線程機制——Python和GIL 160
5.4.1 Python中的并發(fā)性——多進程機制 160
5.4.2 質(zhì)數(shù)檢查器 161
5.4.3 排序磁盤文件 163
5.5 多線程與多進程比較 168
5.6 先入為主的與合作的多任務處理 170
5.7 Python中的asyncio模塊 173
5.8 等待future對象——async和await 175
5.9 concurrent.future——高級并發(fā)處理 178
5.9.1 磁盤縮略圖產(chǎn)生器 179
5.9.2 并發(fā)選項——如何選擇? 181
5.10 并行處理庫 182
5.10.1 joblib 182
5.10.2 PyMP 183
5.10.3 fractals —— Mandelbrot集 184
5.11 Web擴展 189
5.11.1 擴展工作流——消息隊列和任務隊列 189
5.11.2 Celery —— 一種分布式任務隊列 190
5.11.3 在Web上使用Python服務——WSGI 194
5.12 可擴展架構(gòu) 197
5.12.1 垂直可擴展架構(gòu) 197
5.12.2 水平擴展架構(gòu) 198
5.13 本章小結(jié) 201
第6章 安全性——編寫安全代碼 202
6.1 信息安全架構(gòu) 202
6.2 安全編碼 203