2014-03-04 30 views
0

非常 DDD新的(也可能混淆),但我後來閱讀了一些書籍和教程,並希望爲朋友創建一個非常簡單的示例項目。如果沒有問題,我想問一些關於如何進行的建議!域驅動設計 - 創建存儲庫

我有了員工測試公司,與員工做銷售。概念證明是創建/讀取/更新/刪除他們製作的員工和銷售。另一個需要是拿出他們所做銷售的統計數據(按季度,按年份,按月份,按天計算,我相信以後會有更多)。一個非常特殊的頁面將顯示所有事情的統計數據 - 這家公司的員工數量,銷售量最高的員工,按季度,按年份,按月份和按天計算的銷售總額爲所有員工。此外,我們的目標是展示一年中最好的一週,以及一週中最好的一天(所以如果本週一有大部分的銷售,展示等等)。如果

我的問題有人能告訴我:

1)我可以讓我的員工和銷售的倉庫結合起來呢?這是我的聚合根?當你遇到需要對數據進行大量分析的情況時,該怎麼辦? SQL在執行此操作(總和,計數,組等)方面比在代碼中嘗試任何東西要快得多,所以我需要大量的Sql語句來總結和返回數據。我應該創建一個存儲庫,其唯一的工作是處理將用於報告的數據嗎?或者它屬於同一個存儲庫,即使它會引入更多的代碼?應該返回哪種類型的數據?我正在考慮製作「年報」課程和「每週報告」課程或類似的東西。餿主意? 2)如果不知怎的,我不得不添加一個新的存儲庫(假設在辦公室裏的設備),並且在上面的特殊頁面上我想要顯示水冷卻器的數量,可以參考兩個存儲庫來獲取數據(我理解這聽起來在網格中顯示不相關的數據點是多麼荒謬,但我們只是說它是必需的)。當你從不同的東西獲取數據的子集並顯示在組合頁面上時,一個好的方法是什麼?

非常感謝您的幫助!

回答

0

我可以爲我的員工和銷售的倉庫結合起來呢?

當然可以,但那會破壞single responsibility principle。這聽起來不是一個好主意。

那是我聚合根?

不,聚合根是您可以傳遞到存儲庫進行CRUD操作的域對象。聚合根是可用於存儲庫上的CRUD操作的最小可能對象。所以如果你的Employee對象有一個Roles對象,並且Employee對象是聚合根,你的EmployeeRepository將不能在Roles對象上工作。

當你遇到需要對數據進行大量分析的情況時,該怎麼辦? SQL在執行此操作(總和,計數,組等)方面比在代碼中嘗試任何東西要快得多,所以我需要大量的Sql語句來總結和返回數據。我應該創建一個存儲庫,其唯一的工作是處理將用於報告的數據嗎?

這將是一個好主意。將計算留在數據庫,並通過ReportRepository檢索計算的數據。

或者它屬於同一個存儲庫,即使它會引入更多的代碼?應該返回哪種類型的數據?我正在考慮製作「年報」課程和「每週報告」課程或類似的東西。餿主意?

不是一個壞主意。考慮一下你將如何防止重複的代碼。 YearlyReport與WeeklyReport可能並非完全不同。也許他們都可以只是一個具有不同時間框架的報告,或者他們可以從同一個基類繼承。

如果莫名其妙地倒行我必須添加新的存儲庫(假設設備這是在辦公室),以及特殊的網頁上面我想顯示水冷卻器的#上,是可以接受的兩個參考存儲庫來獲取數據(我理解這聽起來在網格中顯示不相關的數據點是多麼荒謬,但我們只是說它是必需的)。

明智的設計我看到使用多個存儲庫來制定答案沒有問題。它可能表現不佳。

當您從不同的東西獲取數據的子集並顯示到組合頁面上時,一種好的方法是什麼?

如果你事先不知道他們會是什麼,那麼你將不得不在抽象領域模型中抽象出這些東西。