最近在思考通用元件庫的設計。
考慮到專案中一些功能的重複使用,需要將它們封裝起來,做成元件的方式,提供**的復用性。
在公用元件的封裝中,日誌記錄是比較典型的乙個。通常日誌記錄的形式很多,但是在乙個專案中的使用形式很單一。但是,現在的專案,需要提供多種日誌記錄的實現。記錄進平面檔案、記錄進資料庫,記錄的時候根據業務不同,還有其他的區分等。
設計的時候需要提供充分的可擴充套件性,以後有可能還要增加其他的記錄形式。
日誌類的設計,採用的是策略模式:
簡單實現如下:
很顯然,這裡出現了一系列的同級別的功能相似的派生類,我們可以用工廠來管理他們的建立。
同時,我們想到物件導向的乙個原則--開放封閉原則。也就是對擴充套件開放,對修改封閉。我們想要在修改的時候將改動的範圍縮得越小越好。
如果採用普通的靜態工廠類,通過傳遞硬編碼的字串的標識來判斷應該例項化哪個類的話。形如下實現方式: public static logger createloggerinstance_old(string loggertype) return mylogger; } 那麼我們要新增乙個日誌記錄方案的改動就會非常多:
1、你必須再去實現乙個新的日誌記錄派生類,繼承自logger,去實現新的"演算法"邏輯。
2、修改如上類庫的例項化派生類物件的方法,再增加乙個新的case語句。
3、當然客戶端也得做出應變。
其實,我們可以動態地將型別傳遞給例項化派生類物件的方法,這樣就不需要採取上面的"匹配機制",簡易實現如下: public static logger createloggerinstance(string classnameforlogger) return null; } 這樣我們就永遠也不用再來修改這個方法了。
在客戶端(呼叫端),我們可以將需要用到的不同的日誌記錄類的型別資訊通過配置的方式配置在配置檔案中。這樣在新增一種日誌記錄方案的時候,改動就小得多。
以上就是這個工具元件設計的構思,當然具體的記錄實現都是封裝的微軟企業庫中的logging元件。
layPage 多功能的js分頁元件
laypage是一款多功能的js分頁元件,即適用於非同步分頁,又可用於傳統的整頁重新整理跳頁,還支援資訊流載入,並且可無縫遷移至node.js平台。laypage不依賴於任何第三方庫,直接拿來用即可,它的介面繼承了layui系列元件的一貫簡潔,極易上手。新增 demo 2016 01 14 php ...
PHP 日誌記錄功能實現
此文作者的日誌是單一日誌,加數學序號擴充套件。我現在用的是日期日誌,應用功能環境不一樣,實現的東西有些不同。對於現在的應用程式來說,日誌的重要性是不言而喻的。很難想象沒有任何日誌記錄功能的應用程式執行在生產環境中。日誌所能提供的功能是多種多樣的,包括記錄程式執行時產生的錯誤資訊 狀態資訊 除錯資訊和...
PHP 日誌記錄功能實現
此文作者的日誌是單一日誌,加數學序號擴充套件。我現在用的是日期日誌,應用功能環境不一樣,實現的東西有些不同。對於現在的應用程式來說,日誌的重要性是不言而喻的。很難想象沒有任何日誌記錄功能的應用程式執行在生產環境中。日誌所能提供的功能是多種多樣的,包括記錄程式執行時產生的錯誤資訊 狀態資訊 除錯資訊和...