2011-04-20 26 views
0

我們有一個由少數應用程序組成的系統。每個應用程序在某些點需要生成一個事件到一個事件日誌。 (事件日誌是數據庫中的一個表,具有定義事件日誌號,事件類型等的屬性。)所有事件日誌都有一定的通用屬性,但每個日誌都有一些特定的屬性(所以會有一個稀疏表)。每個事件日誌都支持自己的一組事件。這些事件決定了要寫入哪些附加字段。應用程序知道它在某些執行點必須生成的事件日誌號和事件類型。寫入各種事件日誌的設計模式

我正在尋找能夠幫助我們實現這一目標的設計模式。我們需要編寫一個可供應用程序使用的庫,因此每個開發人員都會有一個易於使用的類來插入事件數據。在「代碼級別」上發言時,我想減少客戶端代碼以調用具有特定於它需要生成的事件的簽名的單個方法。 到目前爲止,我想出了一個工廠(最有可能它也將是一個單身人士),將有10個方法(10個事件日誌)。每種方法都會生成一個合適的類(比如EventLog1Entry),它將提供將數據寫入數據庫的方法。
做什麼更進一步我不知道。 有什麼建議嗎?

P.S.這是我第一次嘗試使用某種設計模式,所以如果我太自由地使用專業術語,請原諒我。

+0

觀察者模式。 – 2011-04-20 20:00:31

+0

Observer對於多對多(例如,我們不知道有多少事件日誌以及哪些將訂閱什麼)是很好的。這裏我們有幾個到幾個,所以我不認爲這是最合適的模式。 – 2011-04-20 20:09:29

+0

謝謝。我從來沒有想過那個) – Nickolodeon 2011-04-20 20:13:37

回答

0

你可能想看看log4net - 它已經支持你想要的一切,並且經過高度優化和廣泛測試。

即使您不想僅按照「原樣」使用它,它也可能會爲您提供一些有關多年來設計已被證明的指示。

+0

雖然這不是針對設計體系結構中發佈的問題的答案,但此鏈接可能很有用。 – Nickolodeon 2011-04-21 07:52:05

+0

除了消息字符串,我沒有看到用log4net插入其他字段的可能性。我們在db中有系統特定的字段。我錯過了什麼嗎? – Nickolodeon 2011-04-21 08:22:12

+0

是的,你是:)'log.Warn(新的MsgObj(42,「這麼久,並感謝所有的魚」));'從示例解決方案 - 你可以登錄任何對象,你的自定義appender可以解壓需要的對象。將它們寫入SQL當然也受支持。 – 2011-04-21 09:48:59