4

誰かが私にデメテルの法則を説明するのを手伝ってくれることを願っています. 集約ルートであると想定しているクラスがあり、その中に子クラスのコレクションがある場合、集約ルートを介してアクセスしてそれらの子クラスのプロパティを更新することは違法ですか?

例えば

public class Company
{
    // company has a number of employees
    public List<Employee> Employees {get; set;}
}

public class Employee
{
    // each employee has a lastname
    public int Id {get; set;}
    public string LastName {get; set;}
    // other properties of employee
}

最初に Company クラスにアクセスしているクライアントがいるとしましょう。

Employee e = aCompany.Employees.Where(e => e.Id == 1).Single();
e.LastName = "MarriedName";

または、これは常に会社に委任する必要があります

public class Company
{
    public UpdateEmployeeLastName(int employeeId, string newName)
    {
        Employee e = Employees.Where(e => e.Id == employeeId).Single();
        e.LastName = newName;
    }
}

クライアントで

aCompany.UpdateEmployeeLastName(1, "Marriedname");

2 番目の方が優れているように見えますが、クライアントが更新したい Employee の ID を知らなければならないことに何か問題がありますか?

これは、多数のネストされた集計がある場合に複雑になり始める可能性があるようです。

ありがとう

4

1 に答える 1