Lei da confusão de Deméter

Espero que alguém possa me ajudar a explicar a lei do demeter. Se eu tiver uma classe que suponho ser uma raiz agregada e dentro dela tiver uma coleção de classes filho, é ilegal atualizar as propriedades dessas classes filho acessando-as através da raiz agregada?

por exemplo.

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
}

digamos que eu tenho um cliente que está acessando a classe Company em primeiro lugar, estaria violando a lei do demeter com algo parecido.

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

Ou isso deve sempre ser delegado à empresa

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

no cliente

aCompany.UpdateEmployeeLastName(1, "Marriedname");

O segundo parece melhor, mas há algo errado com o cliente ter que saber a identificação do Funcionário que deseja atualizar?

Parece que isso pode começar a ficar mais complicado quando você tem vários agregados aninhados.

obrigado

questionAnswers(1)

yourAnswerToTheQuestion