簡體   English   中英

具有多步驟過程的應用程序層不使用域層是否可以?

[英]Is It Okay for an Application Layer with a multi-step process to not use the domain layer

我正在使用具有以下層的N層.NET應用程序:

  • 介紹
  • 應用
  • 基礎結構(包含持久性和常見實用程序功能,如電子郵件)

在我的申請中的某個時刻,請求被批准。 批准后,必須執行以下4個步驟:

  1. 將產品標簽代碼分配給請求中的已發行產品。
  2. 將請求狀態從“正在處理”更新為“訂單已完成”
  3. 發送電子郵件給請求者,說明他們的產品已准備好提貨
  4. 向請求者的經理發送電子郵件,告知他們所獲得的雇員以及他們批准該產品的請求的副本

以上步驟必須是原子操作的一部分,這意味着它們必須全部完成或取消操作。 我正在考慮讓應用程序層指導請求存儲庫和持久層來執行以下任務:

  1. 應用程序層請求請求存儲庫執行步驟1和2作為工作事務單元
  2. 應用程序層請求基礎結構層執行步驟3和4。

我不確定應用層是否應該這樣做。 我認為這是因為前兩個操作需要聯系存儲庫,而我避免在域層中這樣做。 最后兩個步驟涉及域層可以通過依賴項注入實例與之對話的基礎結構層。 按照這種邏輯,應用層不會要求域層執行任何操作。 當您具有應用程序層時,對於這樣的多步驟過程,通常情況是這樣嗎? 還是我想念這里的東西?

我知道一個叫做Windows Workflow的框架,但是我不確定在這種情況下是否會有所幫助,因為此多步驟過程不涉及可能需要等待幾天的處理步驟所涉及的人機交互。 如果不需要,我也不想使應用程序過於復雜。

提前致謝。

對我來說,您問題中的第1步和第2步聽起來像領域邏輯。 所以不,這不好。 這兩個步驟應在域中執行。 您可以執行以下操作:

  1. 在應用程序服務中,加載相關的聚合(可能是Request )。

  2. 調用對Request執行第1步和第2步的操作,或者(如果該操作確實不屬於Request )則調用執行這兩個步驟的域服務。

  3. 域操作完成后,應用程序服務可以將修改后的Request保存回數據庫。

  4. 如果上述步驟成功,則可以立即發送電子郵件。 您應該具有某種重試機制,以便即使有暫時性問題,也可以最終發送電子郵件。

如果第二步中的更改修改了一個以上的聚合,則過程將變得稍微復雜一些。 評論中提到的Sagas是解決此問題的一種方法。 盡管如此,單個更改仍是域操作,因此請對其進行建模。

正如plalx在評論中所建議的那樣,如果您具有事件基礎結構,則可以將電子郵件的發送卸載給域事件使用者。 這通常可以免費解決重試機制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM