2012-10-08 42 views
2

我是DDD的初學者,並且面臨着體系結構的一些小問題。DDD和數據導出系統

我們的系統必須能夠以各種格式(Excel,Word,PDF和其他更奇特的格式)導出業務數據。

在您看來,哪一層必須對檢索源數據的整個過程負責,以目標格式導出它們並將最終結果準備給用戶?我很困惑域和應用程序的責任。

而對於出口子系統,實施方案及其通用接口合同是否屬於基礎設施層?

回答

3

我通常在可能的情況下采用簡單的方法。

的域代碼實現您的域的語言 - 的名詞,動詞等

應用程序代碼使用這種語言創造的詩歌。

因此,在您的示例中,輸出的構造是應用程序的關注點,而應用程序將討論的位的構造(因爲您沒有提及它)會關注域。

例如如果報告包含銷售數據,則日期,賬單,訂單等內容將在域中抽象化構建,而應用程序將關注使用這些數據生成文檔。

+0

首先,感謝您的快速回復! 事實上,我忘了提供有關生成文檔的性質的細節。 業務數據必須以通用用戶文檔(Word,Excel,PDF,HTML)的形式導出,但也要以專有格式導出才能使我們的系統在相關業務領域中互操作。這些不是用於演示目的,只是關心原始數據。 –

+0

我會在域層實現所有關於特定專有格式的東西。 您認爲這種設計看起來不錯嗎? 對於「通用」,我同意在域圖層中生成一種抽象文檔。 謝謝你的幫助。 –

+0

不,我會採取由@Bartłomiej建議的方法 - 專有輸出將簡單介紹關注基於實體在域中的轉換。 –

2

無論是應用程序還是域圖層或任何其他「圖層」。 DDD不是分層架構。在此主題上搜索洋蔥結構或端口和適配器模式。

現在到你的問題的核心。你面臨的問題是一個單獨的有界的上下文,應該去你的系統的一個單獨的組件。讓我們稱之爲報告。因爲這只是一個演示問題,所以沒有域邏輯--DDD不適合它。只需製作一些SQL視圖,使用NHibernate,LINQ2SQL,EF甚至純數據讀取器讀取它們,並使用Builder模式構建Word /任何文檔。沒有聚集,存儲庫,服務或任何其他DDD構建塊。

您可能需要進一步研究,並使應用程序中的所有數據呈現都由單獨的組件處理。這就是CQRS。

+0

感謝您的諮詢! –