Gesetz der Demeter-Verwirrung
Ich hoffe, jemand kann mir das Gesetz des Demeters erklären. Wenn ich eine Klasse habe, von der ich annehme, dass sie ein Gesamtstamm ist und in der sich eine Sammlung von untergeordneten Klassen befindet, ist es illegal, die Eigenschaften dieser untergeordneten Klassen zu aktualisieren, indem ich über den Gesamtstamm auf sie zugreife?
z.B.
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
}
Nehmen wir an, ich habe einen Kunden, der zuerst auf die Firmenklasse zugreift. Dies würde das Gesetz von Demeter verletzen.
Employee e = aCompany.Employees.Where(e => e.Id == 1).Single();
e.LastName = "MarriedName";
Oder sollte dies immer an die Firma delegiert werden
public class Company
{
public UpdateEmployeeLastName(int employeeId, string newName)
{
Employee e = Employees.Where(e => e.Id == employeeId).Single();
e.LastName = newName;
}
}
im Client
aCompany.UpdateEmployeeLastName(1, "Marriedname");
Die zweite scheint besser zu sein, aber stimmt etwas nicht, wenn der Kunde die ID des Mitarbeiters kennen muss, den er aktualisieren möchte?
Dies scheint kompliziert zu werden, wenn Sie mehrere verschachtelte Aggregate haben.
Vielen Dank