0

我正在重構DDD的應用程序,迄今爲止這麼好,但我對某些責任以及解決問題的最佳方法有疑問。控制器在MVC應用程序上的DDD職責

該應用程序是呼叫中心代理使用的一個Web應用程序,使用CRM功能,後端是一個REST API。

用例如下:代理呼叫一個客戶,需要收集一些信息/提供促銷活動等。 在給客戶打電話並與他交談後,他需要填寫一些信息,該信息是組合框,數據從數據庫中填充數據,並且將帶有實體ID的POST發送到端點以註冊它。因此,我們有一個端點contactAttempt,它接收數據,customerId,agentId,某些組合框信息(subjectId,reasonId,extraInfo1,extraInfo2),額外的信息不會調用該信息,只是爲了簡化。

該信息被反序列化爲傳遞給應用程序服務的DTO對象,該應用程序服務查閱相應的存儲庫以檢查id是否有效並返回實體,如果未找到實體,則會拋出異常控制器通過消息捕獲並回答客戶端。

如果所有的實體都是有效的,就會有一些域規則,比如如果是第一次與客戶聯繫,發送歡迎電子郵件和其他東西。

我懷疑是從存儲庫中獲取實體的這個步驟,它應該是這樣或者我應該在控制器中獲取它,並且如果我需要的只是存在的話,那麼我只需將它傳遞給域服務邏輯需要應用業務規則?

  • 上述方法的優缺點是什麼?
  • 還有其他方法嗎?
  • 在MVC的背景下,Controller的職責是什麼?
+0

Mvc與DDD不兼容*。 –

+0

另外,你指的是什麼樣的服務?域名服務? –

+0

關於mvc,好的,只是考慮一個控制器,它將接收到一個請求,我正在討論從dB,控制器,應用服務或域服務中獲取實體的邏輯的位置 –

回答

0

MVC負責將消息中的HTTP請求反序列化爲「應用層」。

所以它應該從querystring/body/headers獲取所需的所有值,並以不可變的值(命令)傳遞給服務。這是因爲應用程序服務(處理程序,無論)應該以事務方式執行命令,並且如果實體(如此行爲)在應用程序層之外訪問,則不能確保在應用程序層之外不會發生任何修改。