我是DDD的初學者,並且面臨着體系結構的一些小問題。DDD和數據導出系統
我們的系統必須能夠以各種格式(Excel,Word,PDF和其他更奇特的格式)導出業務數據。
在您看來,哪一層必須對檢索源數據的整個過程負責,以目標格式導出它們並將最終結果準備給用戶?我很困惑域和應用程序的責任。
而對於出口子系統,實施方案及其通用接口合同是否屬於基礎設施層?
我是DDD的初學者,並且面臨着體系結構的一些小問題。DDD和數據導出系統
我們的系統必須能夠以各種格式(Excel,Word,PDF和其他更奇特的格式)導出業務數據。
在您看來,哪一層必須對檢索源數據的整個過程負責,以目標格式導出它們並將最終結果準備給用戶?我很困惑域和應用程序的責任。
而對於出口子系統,實施方案及其通用接口合同是否屬於基礎設施層?
我通常在可能的情況下采用簡單的方法。
的域代碼實現您的域的語言 - 的名詞,動詞等
應用程序代碼使用這種語言創造的詩歌。
因此,在您的示例中,輸出的構造是應用程序的關注點,而應用程序將討論的位的構造(因爲您沒有提及它)會關注域。
例如如果報告包含銷售數據,則日期,賬單,訂單等內容將在域中抽象化構建,而應用程序將關注使用這些數據生成文檔。
無論是應用程序還是域圖層或任何其他「圖層」。 DDD不是分層架構。在此主題上搜索洋蔥結構或端口和適配器模式。
現在到你的問題的核心。你面臨的問題是一個單獨的有界的上下文,應該去你的系統的一個單獨的組件。讓我們稱之爲報告。因爲這只是一個演示問題,所以沒有域邏輯--DDD不適合它。只需製作一些SQL視圖,使用NHibernate,LINQ2SQL,EF甚至純數據讀取器讀取它們,並使用Builder模式構建Word /任何文檔。沒有聚集,存儲庫,服務或任何其他DDD構建塊。
您可能需要進一步研究,並使應用程序中的所有數據呈現都由單獨的組件處理。這就是CQRS。
感謝您的諮詢! –
首先,感謝您的快速回復! 事實上,我忘了提供有關生成文檔的性質的細節。 業務數據必須以通用用戶文檔(Word,Excel,PDF,HTML)的形式導出,但也要以專有格式導出才能使我們的系統在相關業務領域中互操作。這些不是用於演示目的,只是關心原始數據。 –
我會在域層實現所有關於特定專有格式的東西。 您認爲這種設計看起來不錯嗎? 對於「通用」,我同意在域圖層中生成一種抽象文檔。 謝謝你的幫助。 –
不,我會採取由@Bartłomiej建議的方法 - 專有輸出將簡單介紹關注基於實體在域中的轉換。 –