ドメイン駆動設計に手を出していると、ドメイン モデル内の集約ルートを特定する方法に関する状況に遭遇しました。
次の 3 つのクラスがあり、単純な To Do リストをモデル化しています。
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; }
}
モデルについて次のように述べることができます。
- 更新は、タスクのコンテキスト内にのみ存在します。
- タスクは、リストのコンテキスト内にのみ存在します。
したがって、リストは唯一の集約ルートのように見えます。(実際、私のデータ アクセス レイヤーでは、List オブジェクトの読み込みと保存のみが許可されます。)しかし、Task クラスに現在存在する UI を List クラスにきれいにプッシュする方法がわかりません。現在、私の List クラスは Task オブジェクトへの参照を配布しており、呼び出し元がそれらを変更できるようになっています。
これは、その存在が含まれているリストに依存している場合でも、タスクが集約ルートでもあることを意味しますか?
前もって感謝します。