我希望有人可以帮助向我解释得墨忒耳定律。如果我有一个类,我假设它是一个聚合根,并且其中有一个子类的集合,通过聚合根访问它们来更新这些子类的属性是非法的吗?
例如
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 类,它是否会违反 demeter 法则。
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");
第二个似乎更好,但是客户端必须知道要更新的员工的 id 有什么问题吗?
如果您有许多嵌套聚合,这似乎会开始变得复杂。
谢谢