注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)Python設(shè)計(jì)模式

Python設(shè)計(jì)模式

Python設(shè)計(jì)模式

定 價(jià):¥98.00

作 者: Harry Percival,Bob Gregory 著,柴一平 徐海洋 譯
出版社: 中國(guó)電力出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購(gòu)買這本書可以去


ISBN: 9787519891824 出版時(shí)間: 2025-02-01 包裝: 平裝-膠訂
開本: 16開 頁(yè)數(shù): 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  在這本實(shí)用指南中,本書介紹了經(jīng)過(guò)驗(yàn)證的架構(gòu)設(shè)計(jì)模式,幫助Python開發(fā)人員管理應(yīng)用程序復(fù)雜性,并從測(cè)試套件中獲得最Z大價(jià)值。每種模式都用優(yōu)雅且慣用的Python實(shí)例進(jìn)行了說(shuō)明。模式包括: 依賴倒置及其與端口和適配器(六邊形/整潔架構(gòu))的聯(lián)系。領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中的實(shí)體、值對(duì)象和聚合之間的區(qū)分。持久存儲(chǔ)的倉(cāng)儲(chǔ)和工作單元模式。事件、命令和消息總線。命令查詢責(zé)任分離(CQRS)。事件驅(qū)動(dòng)架構(gòu)和反應(yīng)式微服務(wù)。

作者簡(jiǎn)介

  Harry Percival自2009年以來(lái)一直是一名Python程序員和TDD(測(cè)試驅(qū)動(dòng)開發(fā))以及XP(極限編程)的愛好者。他是O'Reilly出版的《Test-Driven Development with Python》的作者,該書的副標(biāo)題《Obey the Testing Goat》更為人所知。Bob Gregory已經(jīng)使用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)開發(fā)事件驅(qū)動(dòng)系統(tǒng)超過(guò)十年,所用語(yǔ)言包括C#、F#、Python和TypeScript。

圖書目錄

目錄
前言 1
第0 章 概述 11
第一部分 構(gòu)建支持領(lǐng)域模型的架構(gòu)
第1 章 領(lǐng)域建模 23
1.1 什么是領(lǐng)域模型 24
1.2 探索領(lǐng)域語(yǔ)言 .27
1.3 單元測(cè)試領(lǐng)域模型 28
1.3.1 數(shù)據(jù)類非常適合值對(duì)象 34
1.3.2 值對(duì)象和實(shí)體 36
1.4 并非一切都必須是對(duì)象:領(lǐng)域服務(wù)函數(shù) 38
1.4.1 基于Python 的魔法方法利用Python 使用我們的模型 39
1.4.2 異常也可以表達(dá)領(lǐng)域概念 40
第2 章 存儲(chǔ)庫(kù)模式 43
2.1 持久化我們的領(lǐng)域模型 .44
2.2 一些偽代碼:我們需要什么 44
2.3 將DIP 應(yīng)用于數(shù)據(jù)訪問 .45
2.4 回顧:我們的模型 47
2.4.1 一般的ORM 方式:模型依賴于ORM 47
2.4.2 反轉(zhuǎn)依賴關(guān)系:ORM 依賴于模型 .49
2.5 介紹存儲(chǔ)庫(kù)模式 52
2.5.1 抽象的存儲(chǔ)庫(kù) 53
2.5.2 什么是權(quán)衡 54
2.6 構(gòu)建用于測(cè)試的假存儲(chǔ)庫(kù)現(xiàn)在變得微不足道 .58
2.7 在Python 中,什么是端口和適配器 59
2.8 總結(jié) .60
第3 章 一個(gè)簡(jiǎn)要的插曲:關(guān)于耦合和抽象 .63
3.1 抽象狀態(tài)有助于增加可測(cè)試性 64
3.2 選擇正確的抽象 68
3.3 實(shí)現(xiàn)我們所選擇的抽象 .69
3.3.1 使用偽造和依賴注入進(jìn)行邊緣到邊緣測(cè)試 72
3.3.2 為什么不直接修補(bǔ)呢.74
3.4 總結(jié) .77
第4 章 我們的第一個(gè)用例:Flask API 和服務(wù)層 79
4.1 將我們的應(yīng)用程序連接到真實(shí)世界.81
4.2 第一個(gè)端到端測(cè)試 81
4.3 直接實(shí)現(xiàn)83
4.4 需要數(shù)據(jù)庫(kù)檢查的錯(cuò)誤條件 84
4.5 引入服務(wù)層,并使用FakeRepository 對(duì)其進(jìn)行單元測(cè)試 86
4.6 為什么一切都被稱為服務(wù) 91
4.7 將事物放入文件夾以查看它們的歸屬 92
4.8 總結(jié) .93
第5 章 高速擋和低速擋的TDD 97
5.1 我們的測(cè)試金字塔看起來(lái)怎么樣 .98
5.2 應(yīng)該將領(lǐng)域?qū)訙y(cè)試轉(zhuǎn)移到服務(wù)層嗎.98
5.3 在決定編寫哪種測(cè)試時(shí) 100
5.4 高速擋和低速擋 .101
5.5 將服務(wù)層測(cè)試與領(lǐng)域完全解耦 101
5.5.1 改進(jìn):在Fixture 函數(shù)中保留所有領(lǐng)域依存關(guān)系 .102
5.5.2 添加缺失的服務(wù) 103
5.6 將改進(jìn)貫穿到E2E 測(cè)試中.104
5.7 總結(jié) 106
第6 章 工作單元模式 107
6.1 工作單元與存儲(chǔ)庫(kù)協(xié)作 109
6.2 通過(guò)集成測(cè)試驅(qū)動(dòng)UoW . 110
6.3 工作單元及其上下文管理器 . 112
6.3.1 真正的工作單元使用SQLAlchemy 會(huì)話 . 113
6.3.2 用于測(cè)試的假工作單元 . 113
6.4 在服務(wù)層中使用工作單元(UoW) . 115
6.5 提交/ 回滾行為的顯式測(cè)試 . 116
6.6 顯式提交與隱式提交 117
6.7 示例:使用工作單元將多個(gè)操作分組到一個(gè)原子單元中 118
6.7.1 示例1:重新分配 118
6.7.2 示例2:更改批次數(shù)量 119
6.8 整理集成測(cè)試 119
6.9 總結(jié) 120
第7 章 聚合和一致性邊界 123
7.1 為什么不直接使用電子表格運(yùn)行所有內(nèi)容 124
7.2 不變量、約束和一致性 124
7.3 什么是聚合 126
7.4 選擇聚合.127
7.5 一個(gè)聚合= 一個(gè)存儲(chǔ)庫(kù) 130
7.6 關(guān)于性能.132
7.7 樂觀并發(fā)控制與版本號(hào) 133
7.8 測(cè)試我們的數(shù)據(jù)完整性規(guī)則 .137
7.8.1 使用數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別強(qiáng)制執(zhí)行并發(fā)規(guī)則 138
7.8.2 悲觀并發(fā)控制示例:SELECT FOR UPDATE 139
7.9 總結(jié) 140
7.10 第一部分概述 141
第二部分 事件驅(qū)動(dòng)架構(gòu)
第8 章 事件和消息總線 145
8.1 避免造成混亂 146
8.1.1 首先,讓我們避免弄亂我們的Web 控制器 146
8.1.2 不要弄亂我們的模型147
8.1.3 或者嘗試一下使用服務(wù)層 148
8.2 單一職責(zé)原則 149
8.3 全部都使用消息總線 149
8.3.1 模型記錄事件 .149
8.3.2 事件是簡(jiǎn)單的數(shù)據(jù)類150
8.3.3 模型觸發(fā)事件 .150
8.3.4 消息總線將事件映射到處理程序 .152
8.4 選項(xiàng)1:服務(wù)層從模型中獲取事件并將其添加到消息總線 .153
8.5 選項(xiàng)2:服務(wù)層自己觸發(fā)事件 .154
8.6 選項(xiàng)3:工作單元將事件發(fā)布到消息總線 155
8.7 總結(jié) 159
第9 章 深入探討消息總線 163
9.1 新的需求引導(dǎo)我們走向新的架構(gòu) 164
9.2 將服務(wù)層方法重構(gòu)為消息處理程序167
9.2.1 消息總線現(xiàn)在從工作單元(UoW)收集事件 169
9.2.2 我們所有的測(cè)試也是根據(jù)事件編寫的 171
9.2.3 丑陋的處理方法:消息總線必須返回結(jié)果 .172
9.2.4 修改API 以處理事件 .172
9.3 實(shí)現(xiàn)我們的新需求 .173
9.4 測(cè)試驅(qū)動(dòng)新的處理程序 174
9.4.1 實(shí)現(xiàn) .175
9.4.2 領(lǐng)域模型的新方法 177
9.5 選讀:使用模擬消息總線對(duì)事件處理程序進(jìn)行單元測(cè)試 .178
9.6 總結(jié) 181
9.6.1 我們實(shí)現(xiàn)了什么 181
9.6.2 我們?yōu)槭裁催@么實(shí)現(xiàn)181
第10 章 命令與命令處理程序 183
10.1 命令與事件 .183
10.2 異常處理的差異 185
10.3 討論:事件,命令,以及錯(cuò)誤處理 187
10.4 同步錯(cuò)誤恢復(fù) 190
10.5 總結(jié) 192
第11 章 事件驅(qū)動(dòng)架構(gòu):使用事件集成微服務(wù) 195
11.1 分布式泥球和名詞思維 196
11.2 分布式系統(tǒng)中的錯(cuò)誤處理 199
11.3 替代方案:使用異步消息進(jìn)行時(shí)間解耦 .200
11.4 使用Redis 發(fā)布/ 訂閱通道進(jìn)行集成 201
11.5 使用端到端測(cè)試進(jìn)行全面測(cè)試驅(qū)動(dòng) 202
11.5.1 Redis 是另一個(gè)圍繞消息總線的輕量適配器 204
11.5.2 新發(fā)出的事件 205
11.6 內(nèi)部事件與外部事件 .206
11.7 總結(jié) 206
第12 章 命令?C 查詢責(zé)任分離 209
12.1 領(lǐng)域模型用于寫 210
12.2 大部分用戶不會(huì)買你的家具 211
12.3 Post/Redirect/Get 和CQS 213
12.4 抓緊你的午餐,朋友們 215
12.5 測(cè)試CQRS 視圖 216
12.6 “顯而易見”的替代方案1:使用現(xiàn)有存儲(chǔ)庫(kù) 217
12.7 領(lǐng)域模型未針對(duì)讀取操作進(jìn)行優(yōu)化 218
12.8 “顯而易見”的替代方案2:使用ORM 219
12.9 SELECT N 1 和其他性能考量 .219
12.10 是時(shí)候完全隨波逐流了 .220
12.11 更改讀取模型的實(shí)現(xiàn)很容易 224
12.12 總結(jié) .225
第13 章 依賴注入和Bootstrapping 227
13.1 隱式依賴與顯式依賴 .229
13.2 顯式依賴不是很奇怪和Java 式嗎 230
13.3 準(zhǔn)備處理程序:帶有閉包和部分函數(shù)的手動(dòng)DI .233
13.4 使用類的備選方案 234
13.5 Bootstrap 腳本 235
13.6 消息總線在運(yùn)行時(shí)提供處理程序 238
13.7 在程序入口使用Bootstrap 240
13.8 在測(cè)試中初始化DI 241
13.9 “正確”構(gòu)建適配器:一個(gè)可用示例 243
13.9.1 定義抽象和具體實(shí)現(xiàn) 243
13.9.2 為你的測(cè)試完成一個(gè)假的版本 244
13.9.3 找出如何集成測(cè)試真實(shí)事物的方法 .245
13.10 總結(jié) .247
后記 . 249
附錄A 圖表和表格匯總 267
附錄B 項(xiàng)目結(jié)構(gòu)模板 269
附錄C 交換基礎(chǔ)設(shè)施:全部使用CSV 279
附錄D 存儲(chǔ)庫(kù)和工作單元Django 模式 . 285
附錄E 驗(yàn)證 295

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)