從這些爭論在繼續:域Enties訪問庫
DDD - the rule that Entities can't access Repositories directly
Is it ok for entities to access repositories?
還有一些在那裏感覺更好的爲域名來訪問存儲庫的情況。就拿這個例子中,它假定我需要一個TaskStatus表,其中包含一個用於報告的說明數據庫:
public class TaskStatus
{
public long Id {get;set;}
public string Description {get;set;}
}
public class Task
{
public long Id {get;set;}
public string Description {get;set;}
public TaskStatus Status {get;set;}
public void CompleteTask()
{
ITaskStatusReposity repository = ObjectFactory.GetInstace<ITaskStatusReposity>(); //Or whatever DI you do.
Status = repository.LoadById(Constants.CompletedTaskStatusId);
}
}
我知道我可以有CompletedTaskStatus和OpenTaskStatus對象,但在有些情況下,這將是unnessacery,並可能導致到一個類爆炸。
無論如何,爲什麼存儲庫接口存儲在域中,如果不是這樣的東西?
1 + 2:通過訪問ITaskStatusRepository,域沒有意識到持久性的性質,儘管我接受它意識到持久性存在。當然,它仍然是單元測試,因爲存儲庫可以被嘲笑?我仍然不確定你是如何暗示我會實現我在上面做的事情? –
3:我不確定除了訪問數據庫之外,我的Repository還在做什麼? 4:好吧,所以TaskStatus可以是一個枚舉,你可以有'public void Complete(){Status = TaskStatus.Complete; }'和StatusDescription應該是任務的屬性? –
除非我弄錯了,否則我並不認爲'CompleteTask'是屬於資源庫的東西。我的例子非常簡單,唯一的商業邏輯是當任務完成時,它的狀態變爲「已完成」。這個邏輯可能會更復雜,而且當然不應該在存儲庫中完成? –