我一直在尋找不同的CQRS samples
,其中大多數人使用的命令處理程序不保存UnitOfWork
(即在Entity Framework
的情況下爲DataContext
)。類似這樣的:爲什麼CQRS命令處理程序排除保存UnitOfWork?
public void Handle(Command message)
{
var course = Mapper.Map<Command, Course>(message);
_db.Courses.Add(course);
}
保存(和事務提交)通常發生在後臺處理請求時。
我見過很多CQRS領導者的這種方法,但我從來沒有聽說過它的推理。
這種方法的最大問題是,當你需要在處理程序調用返回後(這種情況發生很多)時需要獲得實體Id的情況。有很明顯的方法可以解決它(即使用Guid,預先從數據庫中請求唯一標識等),但看起來很笨拙。
但是這種方法的優點是什麼?從理論上講,如果每個請求有幾個處理程序,它可以幫助不進行多次數據庫往返。但它並沒有發生很多。我想到的另一個優點是,我們不必鍵入該例程保存呼叫並讓它自動發生。這有點不錯,但它是否超重Id代的問題?
我覺得這一切都使存儲庫更有意義。當我們直接使用DataContext時,我們不使用域,我們修改數據存儲。然後我們不做最後一步(保存我們修改的內容)並假裝解除域對象操作並使用數據存儲。 – SiberianGuy