网站大量收购独家精品文档,联系QQ:2885784924

实战php重构和模式.pdf

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实战php重构和模式

PHP 一次就瞭解三種模式的重構技法 O’REALLY 大澤木小鐵 一些經驗分享 關於重構的實戰經驗 重構時機: • 完成某部份功能後,新增或修改某功能前。 必要條件: • 一定要寫好對應的測試。 • 一定要瞭解程式碼。 • 一定要把重構時間加入時程裡。 注意事項: • 要讓共事的伙伴也能看懂重構後的程式碼。 • 落落長的系統難以重構時,就重GO 吧… 關於測試的實戰經驗 該測什麼? • 不必鉅細靡遺地測試每行程式碼,只測試你覺得 會出錯的部份。 常用技巧: • 程式儘量以帶入參數的方式來注入不易測試的對 象,例如DAO 、Mailer 等。 • 利用Mock Data Object 來做測試。 • 善用IDE 的測試機制及快捷鍵,例如NetBeans 的Ctrl + F6 (測試類別) ;Shift + F6 (執行當前的 測試) ;Alt + F6 (執行所有測試) 關於模式的實戰經驗 應用時機: • 設計階段就知道問題可用哪個模式解決。 • 重構時發現程式結構偏向哪個模式。 注意事項: • 設計時,遵守物件導向設計原則。 • 撰寫程式碼時別去想模式,先專心處理問題。 實例 批次訂單狀態更新程式 背景: • 某電子商務系統Web 平台後端自動化系統。 功能說明: • 金流及物流服務的排程程式,會將相關資訊寫入 佇列資料表中。 • 本程式會依照佇列資料表中的資訊,批次更新訂 單狀態。 • 訂單狀態:已付款、已開發票、已出貨、已結案。 • 訂單狀態更新後,要觸發對應的動作,例如寄信。 • 完成後的佇列要刪除,避免再次觸發。 初版程式碼 DEMO 怎麼重構? 1. 從現有版本分支。 2. 決定要實做的方向。 3. 小步前進。 4. 測試。 5. 完成一次小重構後,提交至版本控制系統。 6. 繼續步驟2 ~ 5 。 7. 整個功能完成後,合併回主幹。 基礎重構 起手式– Extract Method 1. 將相關的數行程式碼複製到一個新方法裡。 2. 不是屬於方法的變數,就當做參數傳入。 3. 將原來的程式碼註解起來,改為呼叫新的方法,測試 。 4. 將註解起來的程式碼刪除,測試 。 將DAO (SQL) 封裝至Model 中 1. 建立一個抽象Model 類別,並將DAO 改為外部可帶入 的類別屬性。 2. 建立訂單子Model 類別。 3. 在主程式中,將原來使用DAO 的部份,改用Model 類 別,測試 。 注意: • 因為通常我們會使用ORM 來取代DAO ,因此這個重構 的重點在於要讓Model 類別是可以被測試的;請參考各 位所使用的的ORM 相關資訊。 將全域常數改為類別常數 1. 在訂單Model 類別建立表示狀態的類別常數。 2. 在原本有使用到全域常數利用編輯器取代功能,改成類 別常數,測試 。 3. 移除原本用define 定義的常數,測試 。 將模式引入程式中 if … elseif … else • 看到if … elseif … else 就是一個徵兆。 • 資料在條件判斷下,有依序處理的狀況。 • 使用Chain of Responsibility 模式。 Chain of Responsibility 原理 1. 將要做的工作單元串成一個鎖鏈。 2. 將資料拋給第一個工作單元。 3. 符合條件的資料就會被該工作單元處理。 4. 不符合條件的資料就會被轉向下一個工

文档评论(0)

rachel + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档