2014-12-26 46 views
4

我正在開發一個控制檯應用程序使用洋蔥架構和域驅動設計。我有兩個域,我需要實現日誌記錄,我弄糊塗我可以放置日誌記錄組件的位置。我可以將它放在兩個域的相應基礎架構中嗎?或者在共享內核中可以在兩個域中引用?如果我需要將它放在共享內核中,我應該遵循的結構是什麼?我的意思是像核心,基礎設施。日誌應該在洋蔥建築與DDD

回答

5

伐木是一個橫切關注。面向方面的編程旨在將橫​​切關注點封裝到各個方面。這可以清晰地隔離和重用代碼,以解決橫切關注問題。

您需要創建一個庫並實現您的日誌記錄類,如「MyProject.CrossCutting.Logging」,並使用面向方面的方法使用此庫記錄事件。

Typical Onion Architecture

+0

聽起來不錯,但通常意味着有一個集中式日誌,但如果要爲聚合保存事件 - 它們可能具有相同的結構,但它們應該封裝(只能通過聚合根訪問) ,那麼如果我每個聚合都有事件,比如SalesEvent,CustomerEvent。那麼根據DDD它應該是Aggregate root負責處理這些事件,不是嗎?或者,也許它仍然意味着記錄器處於'infrasture'並且聚合根稱它爲「保存我的事件」,但記錄器如何解決存儲的位置? – Prokurors

2

如果您遵循DDD和洋蔥架構,這不要緊,你有多少領域有。如果需要,每個域可以實現他們自己的記錄器版本。更可能的是,您將創建一個記錄界面,並可能創建一個靜態實現,並保存在公共層中,任何需要它的層都可以調用該實現。在之前共享的圖像中,它將保留在橫切圖層中。如前所述,記錄是所有層的關注點。

+0

根據前面的建議,我們所做的是,我們在共享內核中爲核心和具體實現創建了一個接口,我們正在使用核心服務的主程序將這個具體實現注入到核心。我正朝着正確的方向走嗎? –

+1

@MaheshkumarCh日誌記錄不是一個域的問題。它不應該在任何領域模型中,無論是共享內核還是獨立領域。 – guillaume31

+0

然後記錄應該去哪裏?我正在使用洋蔥建築。我正在使用登錄服務來記錄所有操作。 –

1

日誌記錄跨所有應用程序。這應該是你的框架的一部分。所有應用程序項目的所有層都可以依賴於您的框架,就像依賴於.Net Framework,Spring等一樣。如果您的框架必須抽象出可以輕鬆依賴的橫切關注點,然後只需在基礎結構中的應用程序的組合根中引用該實現。