簡體   English   中英

DDD和存儲庫模式將與CRUD有關的行為放在何處

[英]DDD and Repository pattern where to put behavior concerning CRUD

我嘗試在我的域模型中加入盡可能多的業務邏輯。

每次更新MyEntity時,我希望發生兩件事:

  1. 發送消息給創建它的用戶
  2. 檢查更改是否適用於某些業務規則

如果實體不是聚合根的子代。

通常,我將從存儲庫中獲取特定實體。 更改實體並保留它
使用MyRepository.Save()返回數據庫

在這種情況下,我必須將業務邏輯放在我的應用程序或DAL中,而不是域模型中。 我試圖避免使用業務邏輯層,除非絕對必要,但是除非我使用名為MyEntity.Update()的方法或類似的方法,否則我似乎無法適應這一要求,但是我有一種不正確的感覺做到的方式。

首先讓我說一下,我不反對存儲庫模式。 我最近在一個項目上成功使用了一個。

我要說的是謹慎行事……如果您不能將需求封裝在對象中,則可能需要再次考慮面向對象的方法。 為了執行其他操作而引入數據訪問層似乎是一種代碼味道。 我已經使用服務層來接收請求,管理事務和版本控制,但是沒有用於諸如驗證之類的其他事情。 潛在地,您的服務業者可能如下所示。

    public enum UpdateResult
    {
         Success,
         NoMyEntityFound,
         StaleData,
         InvalidRequest
    }


public class MyService
{


     ...
     ...


     public UpdateResult Update(...)
     {
          ...Start Tran
          ...Load var m = MyEntity
          ...do the bare minimum here 
          ...m.Update()
          ...Commit Tran

          return UpdateResult.Success;
     }

}

話雖如此,存儲庫上的警告尾巴

http://ayende.com/blog/3955/repository-is-the-new-singleton

暫無
暫無

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

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