2012-02-16 77 views
5

在域驅動的設計中,我遇到了關於如何識別我的域模型中的聚合根的情況。如何識別域模型中的聚合根?

我有以下三個類,造型簡單的待辦事項列表:

public class List { 
    private IList<Task> _tasks; 

    public List() { ... } 
    public string Name { get; set; } } 
    public IEnumerable<Task> Tasks() { ... } 
    public void AddTask(string descr) { ... } 
    public void RemoveTask(Task t) { ... } 
    public Task GetRandomTask() { ... } 
} 

public class Task { 
    private IList<Update> _updates; 

    public Task(string descr) { ... } 

    public string Description { get; } 
    public bool IsClosed { get; } 
    public IEnumerable<Update> Updates() { ... } 
    public void AddUpdate(string descr, bool close) { ... } 
} 

public class Update { 
    public Update(string descr) { ... } 
    public string Description { get; } 
} 

我能說出關於模型如下:

  1. 的更新僅存的上下文任務。
  2. 任務僅存在於列表的上下文中。

因此,列表似乎是唯一的聚合根。 (事實上​​,我的數據訪問層將只允許加載/保存List對象。)但是,我看不到如何幹淨地將當前存在於我的Task類的UI上的UI推送到List類。此刻,我的List類將派發對任務對象的引用,允許調用者修改它們。

這是否意味着Task也是一個聚合根,即使它的存在依賴於一個包含List?

在此先感謝。

+1

相關問題:[DDD:Identifying aggregate root](http://programmers.stackexchange.com/questions/150196/)。 – 2016-08-03 00:12:43

回答

5

Vaughn Vernon有關於總體設計的3 part article,可能會對您的問題提供一些啓示。

+0

感謝您的有用鏈接。 – rob 2012-02-16 20:05:45