5

ドメイン駆動設計に手を出していると、ドメイン モデル内の集約ルートを特定する方法に関する状況に遭遇しました。

次の 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; }
}

モデルについて次のように述べることができます。

  1. 更新は、タスクのコンテキスト内にのみ存在します。
  2. タスクは、リストのコンテキスト内にのみ存在します。

したがって、リストは唯一の集約ルートのように見えます。(実際、私のデータ アクセス レイヤーでは、List オブジェクトの読み込みと保存のみが許可されます。)しかし、Task クラスに現在存在する UI を List クラスにきれいにプッシュする方法がわかりません。現在、私の List クラスは Task オブジェクトへの参照を配布しており、呼び出し元がそれらを変更できるようになっています。

これは、その存在が含まれているリストに依存している場合でも、タスクが集約ルートでもあることを意味しますか?

前もって感謝します。

4

2 に答える 2