考慮以下情形:DDD邏輯和持久性無知
public class Document
{
private ISet<User> sharedWith;
public Document(string name)
{
this.sharedWith = new HashSet<User>();
this.Name = name;
}
public string Name { get; private set; }
public IEnumerable<User> SharedWith
{
get
{
return this.sharedWith;
}
}
public void ShareWith(User user)
{
if (this.SharedWith.Contains(user))
{
throw new Exception("This document is already shared with that user.");
}
this.sharedWith.Add(user);
}
}
Documents
可以與User
- 當與用戶共享文檔,如果文檔已經被與該用戶共享共享,拋出異常。
- 文檔可以與成千上萬的用戶共享。
顯然,這並不規模非常好,因爲需要檢查SharedWith
用戶的存在,導致了ORM懶加載整個收集到內存中。我可能做應用程序服務中的存在檢查,但我認爲這個領域的邏輯,所以它對我最有意義,我把它保留在Document類。
我似乎無法弄清楚這應該如何與DDD完成?如果我無法使用ORM,那麼如何做這種事情呢?
我想我應該有一個文檔彙總和一個用戶彙總?
我已經看過各種DDD資源(雖然我還沒有讀過這本書),但我似乎無法找到這個特定場景的答案。
這種類型的邏輯可以/應該域服務中的歸屬。只是另一種處理這種事情的策略模式。你的回購可以有一個簡單的方法返回一個布爾文是否已經與一個特定的用戶共享文檔 – Marco
@Marco然後我沒有理解什麼樣的邏輯應該在域類本身?我所描述的不是所謂的域邏輯嗎? – Jeff
集合強制執行的一致性邊界是它的不變量。你的商業用戶真的*說過這是一個商業規則,還是你自己想出的東西? – Marco