産品特色
編輯推薦
本書分為5個部分:
第Ⅰ部分“奠定堅實的基礎”涵蓋瞭軟件工程的關鍵概念,例如SOLID和DRY原則,還討論瞭單元測試和測試驅動開發的優點。
在第Ⅱ部分“測試基於模式的代碼”中,我們描述並使用測試驅動開發創建瞭幾個有用的代碼模式。
第Ⅲ部分“測試和編寫高級JavaScript特性”描述瞭如何使用和測試JavaScript語言更高級的特性。
第Ⅳ部分“測試中的特殊主題”提供瞭測試DOM操作的樣例,還演示瞭用於增強代碼標準的靜態分析工具的使用。
第Ⅴ部分“總結”迴顧瞭測試驅動開發的概念,還展示瞭一些本書用到的JavaScript習語。
內容簡介
為瞭構建更健壯的大型JavaScript應用程序,應先測試,後編碼
資深開發人員仍然在與大型JavaScript應用程序的失敗做鬥爭,而這往往是由於應用程序自身的規模而導緻的。本書以測試驅動工作流的形式提供瞭解決方案,它將産生經得起時間考驗的健壯應用程序。本書將使用單元測試解釋、演示和采用各種JavaScript模式和結構。隨著本書的學習,你將成為JavaScript測試驅動開發的專傢,勝任開發商業軟件。如果準備在JavaScript開發中引入高級軟件工程,那麼本書正是*佳之選。
主要特色
◆展示瞭如何編寫開始就被確認為正確的代碼,並使用測試讓代碼在接下來的維護過程中仍然保持正確
◆概述用於測試、依賴注入和麵嚮方麵編程的JavaScript框架目前的現狀
◆解釋可測試性特徵以及構建可測試對象的方式
◆演示常見設計模式以及高級JavaScript特性和架構的實現和使用
◆涵蓋DOM訪問測試,包括過度更新、在循環中的過度訪問以及XHR/JSONP請求
作者簡介
Lawrence D. Spencer,領導SeerIS的一個國際開發者團隊,SeerIS公司是波士頓附近的一傢軟件和服務公司。他擁有超過35年的工作經驗,曾經擔任過管理人員、開發人員、谘詢師以及講師,經常齣席編程大會。
Seth H. Richards,從2002年開始一直專業製作軟件。他的工作專注於基於Web的企業級地理信息係統應用。
內頁插圖
目錄
第Ⅰ部分 奠定堅實的基礎
第1章 實踐軟件工程 3
1.1 編寫從開始就正確的代碼 4
1.1.1 掌握JavaScript的特性 4
1.1.2 在大型係統中規避JavaScript陷阱 15
1.1.3 應用軟件工程原則 17
1.2 編寫保持正確的代碼 22
1.2.1 投資單元測試的未來 22
1.2.2 實踐測試驅動開發 22
1.2.3 編寫易於測試的代碼 23
1.3 小結 26
第2章 準備工具 27
2.1 使用測試框架 27
2.1.1 辨彆不正確的代碼 30
2.1.2 可測試性設計 32
2.1.3 編寫最少的代碼 33
2.1.4 安全維護和重構 33
2.1.5 可運行規範 34
2.1.6 當前的開源和商業框架 34
2.1.7 介紹Jasmine 36
2.2 使用依賴注入框架 41
2.2.1 依賴注入的定義 41
2.2.2 使用依賴注入讓代碼更可靠 43
2.2.3 掌握依賴注入 43
2.2.4 案例研究:編寫一個輕量級依賴注入框架 43
2.2.5 使用依賴注入框架 50
2.2.6 當前的依賴注入框架 52
2.3 使用切麵工具 53
2.3.1 案例研究:使用和不使用AOP進行緩存 53
2.3.2 案例研究:構建Aop.js模塊 55
2.3.3 其他AOP庫 67
2.3.4 結論 68
2.4 使用代碼檢查工具 68
2.4.1 使用linting工具讓代碼更可靠 68
2.4.2 JSHint簡介 71
2.4.3 其他工具 73
2.4.4 嚴格模式 74
2.5 小結 74
第3章 構造可靠的對象 75
3.1 使用原生數據 75
3.2 使用對象字麵量 77
3.3 使用模塊模式 78
3.3.1 創建任意模塊 78
3.3.2 創建立即執行模塊 79
3.3.3 創建可靠的模塊 80
3.4 使用對象原型和原型繼承 80
3.4.1 默認對象原型 80
3.4.2 原型繼承 81
3.4.3 原型鏈 82
3.5 使用new創建對象 83
3.6 使用類繼承 88
3.6.1 模擬類繼承 88
3.6.2 重復將殺死Kangaroo 89
3.7 使用函數式繼承 91
3.8 猴子補丁(Monkey-Patching) 92
3.9 小結 95
第Ⅱ部分 測試基於模式的代碼
第4章 瀏覽各種模式的優點 99
4.1 案例分析 99
4.2 通過更廣泛的詞匯産生更加優雅的代碼 100
4.3 使用擁有良好設計、良好測試的構建塊産生可靠的代碼 101
4.4 小結 102
第5章 確保迴調模式的正確使用 103
5.1 通過單元測試瞭解迴調模式 104
5.1.1 編寫和測試使用瞭迴調函數的代碼 104
5.1.2 編寫和測試迴調函數 109
5.2 避免問題 113
5.2.1 扁平化迴調箭頭 113
5.2.2 注意this變量 115
5.3 小結 119
第6章 確保承諾模式的正確使用 121
6.1 通過單元測試瞭解承諾 122
6.1.1 使用承諾 122
6.1.2 構造和返迴承諾 127
6.1.3 測試XMLHttpRequest 130
6.2 串聯承諾 133
6.3 使用承諾封裝器 134
6.4 瞭解狀態和命運 135
6.5 區分標準承諾和jQuery承諾 135
6.6 小結 136
第7章 確保正確使用散函數應用程序 137
7.1 對散函數應用程序進行單元測試 137
7.2 為散函數應用程序創建切麵 139
7.3 區分散函數應用程序和柯裏化 140
7.3.1 柯裏化 140
7.3.2 散函數應用程序 141
7.4 小結 141
第8章 確保備忘錄模式的正確使用 143
8.1 通過單元測試瞭解備忘錄模式 144
8.2 使用AOP添加備忘錄 147
8.2.1 創建備忘錄切麵 147
8.2.2 為restaurantApi應用returnValueCache切麵 150
8.3 小結 152
第9章 確保單例模式的正確實現 153
9.1 通過單元測試瞭解單例模式 154
9.1.1 使用對象字麵量實現單例共享緩存 154
9.1.2 使用模塊實現單例共享緩存 158
9.2 小結 162
第10章 確保工廠模式的正確實現 163
10.1 為工廠編寫單元測試 163
10.2 實現工廠模式 169
10.3 考慮其他工廠類型 171
10.4 小結 171
第11章 確保沙箱模式的正確實現和使用 173
11.1 通過單元測試瞭解沙箱模式 173
11.1.1 創建部件沙箱 174
11.1.2 創建和測試沙箱工具 187
11.1.3 創建與沙箱一起使用的函數 191
11.2 小結 193
第12章 確保裝飾器模式的正確實現 195
12.1 使用測試驅動的方式開發裝飾器 196
12.1.1 為被裝飾的對象編寫一個假對象 197
12.1.2 為錯誤的傳遞編寫測試 198
12.1.3 編寫空白裝飾器 199
12.1.4 添加傳遞功能到裝飾器 200
12.1.5 驗證成功傳遞 202
12.1.6 添加裝飾器的特性 204
12.1.7 通用化裝飾器 210
12.2 小結 211
第13章 確保策略模式的正確實現 213
13.1 通過單元測試瞭解該模式 213
13.1.1 在不使用策略模式的情況下實現transportScheduler 214
13.1.2 使用策略模式實現transportScheduler 216
13.2 小結 227
第14章 確保代理模式的正確實現 229
14.1 通過測試驅動的方式開發代理 230
14.2 小結 245
第15章 確保正確實現可鏈接方法 247
15.1 通過單元測試瞭解該模式 248
15.2 鏈接then方法 255
15.3 小結 257
第Ⅲ部分 測試和編寫高級JavaScript特性
第16章 在無接口語言中遵守接口 261
16.1 瞭解接口的優點 262
16.2 瞭解接口隔離原則 263
16.3 使用測試驅動開發創建契約注冊錶 265
16.3.1 定義契約 266
16.3.2 判斷是否履行瞭契約 267
16.3.3 斷言契約被履行瞭 271
16.3.4 繞過契約執行 273
16.3.5 創建在被返迴(創建)的對象上實施契約的切麵 273
16.4 小結 277
第17章 確保正確的參數類型 279
17.1 瞭解JavaScript無類型參數帶來的機會和風險 280
17.2 擴展ContractRegistry檢查參數 280
17.2.1 界定任務範圍 280
17.2.2 判斷集閤中的所有變量是否都履行瞭它的契約 281
17.2.3 斷言集閤中的所有變量都履行瞭它的契約 289
17.2.4 在切麵中打包參數檢查功能 290
17.3 支持契約庫 292
17.4 綜閤起來 293
17.4.1 創建契約模塊 293
17.4.2 創建應用程序的ContractRegistry 296
17.4.3 為生産發布繞過契約 297
17.5 比較麵嚮切麵的解決方案和靜態解決方案 297
17.5.1 考慮TypeScript的優點 297
17.5.2 考慮切麵的優點 297
17.6 小結 298
第18章 確保正確使用call、apply和bind 299
18.1 瀏覽this是如何綁定的 299
18.1.1 默認綁定 300
18.1.2 隱式綁定 302
18.1.3 new綁定 303
18.1.4 顯式綁定 305
18.2 創建和測試使用call、apply和bind的代碼 305
18.2.1 使用call和apply 305
18.2.2 使用測試驅動開發創建一個Array.prototype.forEach Polyfill 307
18.2.3 使用bind 316
18.3 小結 321
第19章 確保正確使用方法藉用 323
19.1 確保藉用對象符閤需求 324
19.1.1 讓被藉用的函數驗證藉用者的資格 324
19.1.2 嚮被藉用的對象附加切麵 326
19.1.3 使用borrow()方法 329
19.1.4 在ContractRegistry中添加對象驗證器 330
19.2 預期藉用者的副作用 331
19.2.1 考慮被隔離函數的副作用 331
19.2.2 考慮調用其他函數的函數的副作用 332
19.3 預期捐贈者對象的副作用 338
19.4 小結 339
第20章 確保正確使用混閤 341
20.1 創建和使用混閤 343
20.1.1 創建和使用傳統混閤 344
20.1.2 創建和使用函數式混閤 361
20.2 小結 367
第21章 測試高級程序架構 369
21.1 確保觀察者模式的可靠使用 369
21.1.1 檢查觀察者模式 370
21.1.2 增強觀察者模式的可靠性 376
21.2 確保中介者模式的可靠使用 380
21.2.1 瞭解中介者模式 381
21.2.2 增強基於中介者代碼的可靠性 382
21.3 小結 395
第Ⅳ部分 測試中的特殊主題
第22章 測試DOM訪問 399
22.1 對UI進行單元測試 399
22.1.1 檢查難於測試的UI代碼 400
22.1.2 使用TDD創建UI組件 401
22.2 使用分析器優化代碼 411
22.2.1 檢測低效代碼 411
22.2.2 避免不成熟的優化 418
22.3 小結 418
第23章 確保符閤標準 419
23.1 使用ESLint 420
23.1.1 安裝ESLint 420
23.1.2 運行ESLint 424
23.1.3 使用ESLint實施代碼標準 427
23.2 實施架構分離 432
23.2.1 傢庭秘密技術 433
23.2.2 銘記技術 435
23.2.3 不可能任務(Mission Impossible)技術 437
23.2.4 魔術棒(Magic Wand)
技術 441
23.2.5 不要使用調用棧技術 442
23.2.6 其他技術 442
23.2.7 其他架構 442
23.3 小結 443
第Ⅴ部分 總結
第24章 測試驅動開發原則的總結 447
24.1 迴顧值得使用測試驅動開發的原因 447
24.2 練習測試驅動開發 448
24.3 編寫可單元測試的代碼 448
24.4 掌握測試驅動開發的
技術 448
24.4.1 在編碼之前編寫測試 448
24.4.2 保持測試DRY 449
24.4.3 首先測試錯誤條件 449
24.4.4 測試要先易後難 449
24.4.5 具體 449
24.4.6 隻測試一件事情 450
24.4.7 測試數據如同測試一樣重要 450
24.4.8 高效地使用Jasmine 450
24.5 測試本書描述的模式 450
24.5.1 測試麵嚮切麵編程 450
24.5.2 測試對象構造 451
24.5.3 測試迴調 451
24.5.4 測試基於承諾的代碼 451
24.5.5 測試散函數應用程序 451
24.5.6 測試備忘錄模式 452
24.5.7 測試單例模式 452
24.5.8 測試工廠模式 452
24.5.9 測試沙箱 452
24.5.10 測試裝飾器模式 453
24.5.11 測試策略模式 453
24.5.12 測試代理模式 453
24.5.13 測試可鏈接方法 453
24.5.14 測試接口一緻性 453
24.5.15 測試call和apply的
使用 453
24.5.16 測試方法藉用模式 454
24.5.17 測試混閤 454
24.5.18 測試中介者和觀察者模式 454
24.5.19 測試DOM訪問 454
24.5.20 實施架構分離的測試 454
24.6 小結 455
第25章 本書JavaScript習語的總結 457
25.1 迴顧對象 457
25.1.1 可以添加和刪除的對象屬性 457
25.1.2 可以將對象用作詞典 458
25.2 迴顧變量 459
25.2.1 提升變量聲明 459
25.2.2 變量有函數作用域 460
25.3 迴顧函數 463
25.3.1 函數是對象 463
25.3.2 提升函數聲明 463
25.3.3 函數沒有返迴類型 464
25.3.4 函數可以是匿名的 465
25.3.5 函數可以被嵌套 465
25.3.6 函數調用可以使用任意數量的參數 466
25.3.7 函數可以立即被調用 467
25.4 迴顧布爾操作 468
25.4.1 在測試相等性時類型可能會被強製轉換 468
25.4.2 值可以是真或假 469
25.5 小結 469
前言/序言
當我們與開發者同仁分享本書的書名《編寫可靠的JavaScript代碼》時,我們收到瞭如下反饋:
“‘可靠的’和‘JavaScript代碼’這兩個詞現在能放在一塊?”
“這一定是一本非常薄的書。”
“我是否會在書店的小說區域John Grisham最近的驚悚小說附近找到它?”
不,本書不是小說。
我們收到的關於本書書名的反饋錶明瞭一些具有經典的、編譯語言經驗的開發者對於JavaScript的普遍看法:JavaScript被用於創建華麗的作品集網站或者簡單的應用程序,它與任務關鍵的企業應用程序沒有關係。
在過去這種觀點是事實,但現在已經改變瞭。
JavaScript作為一流語言崛起
JavaScript作為野孩子的聲譽是應得的,在接下來的兩個小節中我們將揭示它的一些漏洞。不過,就像被寵壞的繼承者一樣,在繼承瞭傢族事業之後,通過提齣挑戰讓所有人都感到震驚。但最近他變得嚴肅和負責,顯示齣真正偉大的能力。
JavaScript早期僅僅被托付一些短“腳本”任務。任務非常簡單:如果所需的字段未被填充,就將它標記為紅色;如果按鈕被單擊瞭,就應該將另一個頁麵帶入視圖。盡管它的責任有限,但易於相處。到今天為止,大多數程序員使用JavaScript的經驗都是此類。
接著,在重新定義JavaScript的變革中,世界轉嚮瞭Web。這一直是JavaScript遊樂場,當The Old Boys Club的成員在服務器上完成真正的工作時,他就在Web中娛樂自己。
在20世紀90年代末期,當微軟引入iframes和XMLHTTP時,變革開始被阻礙。而當Google在2004年和2005年分彆使Ajax成為Gmail應用程序和Google Maps的一部分時,變革開始崩潰。世界突然注意到當瀏覽器被賦予更多任務時(不隻是顯示服務器分配的內容),Web體驗可以如此豐富。
所以JavaScript被賦予瞭更多的責任,超齣瞭任何人的計劃。JavaScript需要得到幫助。
此時幫助也應運而來,以工具包和框架的形式存在,例如jQuery、 Ext JS、 Ember.js、 Knockout、Backbone和AngularJS。這些有價值
編寫可靠的JavaScript代碼 測試驅動開發JavaScript商業軟件 [Reliable JavaScript: How to code safely in the wor] 下載 mobi epub pdf txt 電子書 格式
編寫可靠的JavaScript代碼 測試驅動開發JavaScript商業軟件 [Reliable JavaScript: How to code safely in the wor] 下載 mobi pdf epub txt 電子書 格式 2024
編寫可靠的JavaScript代碼 測試驅動開發JavaScript商業軟件 [Reliable JavaScript: How to code safely in the wor] mobi epub pdf txt 電子書 格式下載 2024