[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day24 - BasePage
前言
上一篇文章介紹了在開發系統很常會用到的UserControl與MasterPage後,接著來介紹我很常設計的一個類別: BasePage。
BasePage是我自己建的一個類別,繼承自System.Web.UI.Page,接著有需要使用到BasePage共通性的頁面,就都繼承於BasePage。
可以降低重複開發,統一修改,多墊一層super class,雖非抽象介面,但Page是一個特別的class,所以super class並不會造成太多class與class之間的問題。只有繼承鏈的強耦合問題。
Issues
- 繼承自System.Web.UI.Page
- 頁面的super class
- 可自訂function , property跟event(搭配頁面生命週期做變化)
- Class Diagram:
- 統一處理共同的資訊,如
- Global logger
- 存取設定檔或Resource檔,例如Message多國語言
- 註冊JavaScript的function
- 每一個繼承BasePage子頁面都需要的畫面處理
- Global logger
- 與MasterPage的差異
- focus
MasterPage:處理的共同property與function,都是focus在跟MasterPage上UI有關的東西
BasePage:處理的通常是比較非UI,但每一支頁面幾乎會用到的共同function
- 特性
MasterPage:繼承自UserControl
BasePage:通常繼承System.Web.UI.Page (也有可能繼承於另一個自訂的BasePageX.cs)
- focus
- 同樣要注意的特點
- 每頁都套用MasterPage或繼承BasePage,代表上面有寫的都會跑,要小心過於肥大,影響performance。單一職責原則在這邊也同樣適用。
- 繼承就是侵入性的強耦合,繼承有的問題,在這邊使用上也有可能會出現。介面隔離原則跟依賴反轉原則,用來解耦的方式,在這邊也同樣適用。
- 每頁都套用MasterPage或繼承BasePage,代表上面有寫的都會跑,要小心過於肥大,影響performance。單一職責原則在這邊也同樣適用。
結論
雖然繼承是個侵入性強耦合的設計,但不要忘記前面文章所說的:[ASP.NET]91之ASP.NET由淺入深 不負責講座 Day21 - LSP 里氏替換原則
針對違反LSP設計時可行的重構(Refactoring)方式
當Class A錯誤的繼承Class B時:
- 可建構一個新的abstract class C,作為2個concrete Class A與B的父類別,也就是多抽象一層來當兩個的父類別,讓A與B在繼承鏈中深度一樣,來避免A繼承B的強耦合與錯誤使用
- 也可以透過委派的方式來解決(分離)A與B的錯誤繼承關係。
blog 與課程更新內容,請前往新站位置:http://tdd.best/