.NET 日誌記錄模組

來源:互聯網
上載者:User

有朋友突然問我是不是改行搞SEO了。當時聽了有點驚奇,原來是blogs上文章最近都是和SEO相關的 (*^__^*)。問問朋友現在忙些什麼東西,他說在做一些日誌記錄的東西,問我有沒有什麼好的建議(log4.net開源組件不錯)。還是具體問了朋友的一些需求,這個和我們的廣告統計日誌相識。我就想到寫這篇文章了,也避免一下,大家認為我SEO去了。

需求及設想:

1:統計每日使用者的點擊量。
2:考慮到並發和資料庫的壓力。資料先寫入記憶體,在一定間隔時間將資料變化統一寫入資料庫。
3:需要考慮擴充統計不同的業務類型,比如 廣告統計、註冊統計。
業務分析:

業務上有擴充統計類型的需要,那麼必然要定義一個服務介面:
Interface IDayLog
服務需要實現的方法:
Add(); 添加日誌記錄到記憶體
Save();儲存日誌記錄到資料庫
Clear();清空記憶體日誌記錄 

 

根據目前業務需求,定義兩個業務類:
RegDayLog:IDayLog    每天的登入日誌統計
AWDayLog:IDayLog    每天的廣告日誌統計

這裡具體展開一下AWDayLog的系統記錄,根據業務需求,需要在子類上添加幾個屬性:
AWID    需要記錄的廣告ID
Count    廣告ID的增量值
static Dictionary<int, int> adWords    廣告的記憶體資料

 

這些和業務相關類都有了,接下來我們需要一個控制類(和具體業務無關,用來控制商務程序)
static class DayLogHelper   定義幾個和業務相關的屬性和方法:
static Dictionary<String, IDayLog> dayLogList   當前載入的日誌業務列表
CreateLog()    負責載入需要添加日誌記錄的業務模組
Start()       負責開機記錄記錄
FindLog(string logName)    根據logName找到相應的日誌業務模組

LogName枚舉   系統中日誌的類型(這個枚舉可以通過配置進行忽略)

具體的類圖:

從UML類圖中我們可以得到如下資訊:

1:Client類為具體的調用類,從類的關係圖中可以很清楚的看到,Client只和LogName 枚舉、DayLogHelper、IDayLog 有依賴關係。這就說明,我們在模組的外部已經不依賴具體的業務類了,既然這樣,那麼業務發生變化也不會影響到Client調用。松耦合了。

2:可以改進的地方。首先看圖中標記《3》說明如果要新增業務類,就要要改動DayLogHelper。《1》《2》《3》 這三條依賴關係是需要new 具體的業務對象時產生的。那麼如何刪除這3條依賴關係呢?如何達到解耦的目的呢?設定檔,通過讀取設定檔和反射的方式來建立對象。也就是說,如果我們新增加一個“D幣日誌統計”,我只要新增一個DCashDayLog類、WebConfig添加一條設定檔就可以了,對日誌模組不需要做其他處理。當然Web層上需要調用DayLogHerlper添加具體的日誌資料,但這和模組本身已沒關係了。

總結

線上啟動並執行日誌模組和這個也差不多,具體的實現代碼就不寫了。其實說白了就是通過Interface隱藏了具體的業務類型,通過DayLogHelper 封裝了具體業務類的建立過程。寫累了,喝茶去了!

Google 標記: .NET, 日誌記錄, 松耦合, UML類圖設計

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.