重構-改善既有代碼的設計中文版 pdf下載

来源:https://www.cnblogs.com/liulangdemao/archive/2018/11/19/9984548.html
-Advertisement-
Play Games

縱覽武俠江湖,制勝法門不外兩項,內功和外功。二者得一可天下去得,但最終皆入內外兼修之境倚天是自內而外,先修內功九陽真經,然後以此為基礎,加上太極拳和太極劍,最終成就天下第一高手笑傲是自外而內,先學獨孤九劍,後學吸星大法,最後學易筋經。神雕也不外如是,玉女心經算是外功,內功則是獨孤求敗之法門。只修內不 ...


縱覽武俠江湖,制勝法門不外兩項,內功和外功。二者得一可天下去得,但最終皆入內外兼修之境
倚天是自內而外,先修內功九陽真經,然後以此為基礎,加上太極拳和太極劍,最終成就天下第一高手
笑傲是自外而內,先學獨孤九劍,後學吸星大法,最後學易筋經。
神雕也不外如是,玉女心經算是外功,內功則是獨孤求敗之法門。
只修內不修外,好比萬貫家財而不知用,張無忌也要得傳太極方可天下去得。
只修外不修內,終是一場空。令狐沖身懷獨孤九劍,在義救向問天時幾乎丟掉性命。

需要學習的朋友可以通過網盤免費下載pdf版 (先點擊普通下載-----再選擇普通用戶就能免費下載了)http://putpan.com/fs/cy6i5b4efn2sah0u9/

重構,一言以蔽之,就是在不改變外部行為的前提下,有條不紊地改善代碼。多年前,正是本書原版的出版,使重構終於從編程高手們的小圈子走出,成為眾多普通程式員日常開發工作中不可或缺的一部分。本書也因此成為與《設計模式》齊名的經典著作,被譯為中、德、俄、日等眾多語言,在世界範圍內暢銷不衰。

本書凝聚了軟體開發社區專家多年摸索而獲得的寶貴經驗,擁有不因時光流逝而磨滅的價值。今天,無論是重構本身,業界對重構的理解,還是開發工具對重構的支持力度,都與本書最初出版時不可同日而語,但書中所蘊涵的意味和精華,依然值得反覆咀嚼,而且往往能夠常讀常新。

作者簡介  · · · · · ·

Martin Fowler 世界軟體開發大師,在面向對象分析設計、UML、模式、XP和重構等領域都有卓越貢獻,現為著名軟體開發咨詢公司ThoughtWorks的首席科學家。他的多部著作《分析模式》、《UML精粹》和《企業應用架構模式》等都已經成為膾炙人口的經典。

其他參編者——

Kent Beck 軟體開發方法學的泰斗,極限編程的創始人。他是Three Rivers Institute公司總裁,也是Agitar Software的成員。

John Brant和Don Roberts The Refactory公司的創始人,Refactoring Browser (http://st-www.cs.illinois.edu/users/brant/Refactory/)的開發者,多年來一直從事研究重構的實踐與理論。

William Opdyke 目前在朗訊貝爾實驗室工作,他寫的關於面向對象框架的博士論文是重構方面的第一篇著名文章。

目錄  · · · · · ·

第1章 重構,第一個案例1
1.1 起點1
1.2 重構的第一步7
1.3 分解並重組statement()8
1.4 運用多態取代與價格相關的條件邏輯34
1.5 結語52
第2章 重構原則53
2.1 何謂重構53
2.2 為何重構55
2.3 何時重構57
2.4 怎麼對經理說60
2.5 重構的難題62
2.6 重構與設計66
2.7 重構與性能69
2.8 重構起源何處71
第3章 代碼的壞味道75
3.1 DuplicatedCode(重覆代碼)76
3.2 LongMethod(過長函數)76
3.3 LargeClass(過大的類)78
3.4 LongParameterList(過長參數列)78
3.5 DivergentChange(發散式變化)79
3.6 ShotgunSurgery(霰彈式修改)80
3.7 FeatureEnvy(依戀情結)80
3.8 DataClumps(數據泥團)81
3.9 PrimitiveObsession(基本類型偏執)81
3.10 SwitchStatements(switch驚悚現身)82
3.11 ParallelInheritanceHierarchies(平行繼承體系)83
3.12 LazyClass(冗贅類)83
3.13 SpeculativeGenerality(誇誇其談未來性)83
3.14 TemporaryField(令人迷惑的暫時欄位)84
3.15 MessageChains(過度耦合的消息鏈)84
3.16 MiddleMan(中間人)85
3.17 InappropriateIntimacy(狎昵關係)85
3.18 AlternativeClasseswithDifferentInterfaces(異曲同工的類)85
3.19 IncompleteLibraryClass(不完美的庫類)86
3.20 DataClass(純稚的數據類)86
3.21 RefusedBequest(被拒絕的遺贈)87
3.22 Comments(過多的註釋)87
第4章 構築測試體系89
4.1 自測試代碼的價值89
4.2 JUnit測試框架91
4.3 添加更多測試97
第5章 重構列表103
5.1 重構的記錄格式103
5.2 尋找引用點105
5.3 這些重構手法有多成熟106
第6章 重新組織函數109
6.1 ExtractMethod(提煉函數)110
6.2 InlineMethod(內聯函數)117
6.3 InlineTemp(內聯臨時變數)119
6.4 ReplaceTempwithQuery(以查詢取代臨時變數)120
6.5 IntroduceExplainingVariable(引入解釋性變數)124
6.6 SplitTemporaryVariable(分解臨時變數)128
6.7 RemoveAssignmentstoParameters(移除對參數的賦值)131
6.8 ReplaceMethodwithMethodObject(以函數對象取代函數)135
6.9 SubstituteAlgorithm(替換演算法)139
第7章 在對象之間搬移特性141
7.1 MoveMethod(搬移函數)142
7.2 MoveField(搬移欄位)146
7.3 ExtractClass(提煉類)149
7.4 InlineClass(將類內聯化)154
7.5 HideDelegate(隱藏“委托關係”)157
7.6 RemoveMiddleMan(移除中間人)160
7.7 IntroduceForeignMethod(引入外加函數)162
7.8 IntroduceLocalExtension(引入本地擴展)164
第8章 重新組織數據169
8.1 SelfEncapsulateField(自封裝欄位)171
8.2 ReplaceDataValuewithObject(以對象取代數據值)175
8.3 ChangeValuetoReference(將值對象改為引用對象)179
8.4 ChangeReferencetoValue(將引用對象改為值對象)183
8.5 ReplaceArraywithObject(以對象取代數組)186
8.6 DuplicateObservedData(複製“被監視數據”)189
8.7 ChangeUnidirectionalAssociationtoBidirectional(將單向關聯改為雙向關聯)197
8.8 ChangeBidirectionalAssociationtoUnidirectional(將雙向關聯改為單向關聯)200
8.9 ReplaceMagicNumberwithSymbolicConstant(以字面常量取代魔法數)204
8.10 EncapsulateField(封裝欄位)206
8.11 EncapsulateCollection(封裝集合)208
8.12 ReplaceRecordwithDataClass(以數據類取代記錄)217
8.13 ReplaceTypeCodewithClass(以類取代類型碼)218
8.14 ReplaceTypeCodewithSubclasses(以子類取代類型碼)223
8.15 ReplaceTypeCodewithState/Strategy(以State/Strategy取代類型碼)227
8.16 ReplaceSubclasswithFields(以欄位取代子類)232
第9章 簡化條件表達式237
9.1 DecomposeConditional(分解條件表達式)238
9.2 ConsolidateConditionalExpression(合併條件表達式)240
9.3 ConsolidateDuplicateConditionalFragments(合併重覆的條件片段)243
9.4 RemoveControlFlag(移除控制標記)245
9.5 ReplaceNestedConditionalwithGuardClauses(以衛語句取代嵌套條件表達式)250
9.6 ReplaceConditionalwithPolymorphism(以多態取代條件表達式)255
9.7 IntroduceNullObject(引入Null對象)260
9.8 IntroduceAssertion(引入斷言)267
第10章 簡化函數調用271
10.1 RenameMethod(函數改名)273
10.2 AddParameter(添加參數)275
10.3 RemoveParameter(移除參數)277
10.4 SeparateQueryfromModifier(將查詢函數和修改函數分離)279
10.5 ParameterizeMethod(令函數攜帶參數)283
10.6 ReplaceParameterwithExplicitMethods(以明確函數取代參數)285
10.7 PreserveWholeObject(保持對象完整)288
10.8 ReplaceParameterwithMethods(以函數取代參數)292
10.9 IntroduceParameterObject(引入參數對象)295
10.10 RemoveSettingMethod(移除設值函數)300
10.11 HideMethod(隱藏函數)303
10.12 ReplaceConstructorwithFactoryMethod(以工廠函數取代構造函數)304
10.13 EncapsulateDowncast(封裝向下轉型)308
10.14 ReplaceErrorCodewithException(以異常取代錯誤碼)310
10.15 ReplaceExceptionwithTest(以測試取代異常)315
第11章 處理概括關係319
11.1 PullUpField(欄位上移)320
11.2 PullUpMethod(函數上移)322
11.3 PullUpConstructorBody(構造函數本體上移)325
11.4 PushDownMethod(函數下移)328
11.5 PushDownField(欄位下移)329
11.6 ExtractSubclass(提煉子類)330
……
第12章 大型重構359
第13章 重構,復用與現實379
第14章 重構工具401
第15章 總結409
參考書目413
要點列表417
索引419

需要IT編程經典書籍資源大合集百度網盤鏈接的加qq 3083709327,另本人願意有償帶小白學python,幫助你答疑解惑,幫助你解決問題,指導你找工作,帶你入行。相信我有人帶著你的話可以少走彎路,成功入行拿高薪。北京地區周六日可上門指導,非北京線上指導。本人前每日優鮮後端工程師,土木專業自學python成功轉行,月薪5位數,性格安靜,誠信正直,想學的加qq。

另閑聊的也可加,就當交個朋友吧!




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 創建模式——工廠方法 本文解決上需要修改簡單工廠的問題,增加東西,工廠要改代碼。 簡單來說就是將工廠變成介面: 現在User類裡面會變成如下: 但是需要瞭解工廠的類,不符合迪米特法則,而且每個產品一個工廠很麻煩,之後就要用到抽象工廠。 ...
  • 1.創建模式:簡單工廠 單例模式: ArticleDao介面: public interface ArticleDao { public void addArticle(String article) ; public void delArticle(int id) ; public void up ...
  • 1. 例子 1. 做一個鴨子模擬器,裡面有很多不同的鴨子,有的可以游泳,有的可以睡覺,有的可以呱呱叫,一般套路是定義一個鴨子的超類,在 超類里定義睡覺,游泳,呱呱叫的方法,再讓不同的鴨子子類繼承這個超類,實現自己的display()方法來表現鴨子的行為,像下麵這樣: 2. 但如果要加一個可以吃火鍋的 ...
  • 系統架構設計師-軟體水平考試高級-理論-資料庫。其中涉及資料庫模式(三級抽象,兩層映射),數據模型,關係代數,規範化理論,事務處理等。 ...
  • 原型模式 prototype也是常用的一種設計模式,java中已經內置,藉助於Object的clone方法,本文對原型模式進行了簡單介紹,以及Java實現,並且介紹了對象的深拷貝與淺拷貝。 ...
  • 一、概念 工廠方法模式:用來封裝對象的創建。工廠方法模式(Factory Method Pattern)通過讓 子類 決定該創建的對象是什麼,來達到將對象創建的過程封裝的目的。這樣,關於超類的代碼和子類創建對象的代碼之間就解耦了。 角色:  1、抽象工廠(Creator):定義了一個抽象的 ...
  • 有時候,當一個重要的項目進展不順利時,就有了重新開始的願望。有時這來自管理層,但通常來自開發人員自己。他們說,如果他們只有第二次機會,並且可以重新開始,那麼他們可以建立正確的系統。 但這幾乎從未發生過。從我這拿走。我見過公司多次嘗試,我可以毫無例外地說,當一個團隊開始用基本相同的方法重建相同的系統時 ...
  • 基於隊列和基於消息的TTL TTL是time to live 的簡稱,顧名思義指的是消息的存活時間。rabbitMq可以從兩種維度設置消息過期時間,分別是隊列和消息本身。 隊列消息過期時間 Per Queue Message TTL: 通過設置隊列的x message ttl參數來設置指定隊列上消息 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...