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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage