小编mag*_*ets的帖子

德米特法则混淆

我希望有人可以帮我解释一下demeter法则.如果我有一个我假设的类是聚合根,并且其中有一个子类集合,那么通过聚合根访问它们来更新这些子类的属性是不合法的吗?

例如

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
}
Run Code Online (Sandbox Code Playgroud)

假设我有一个客户端正在访问公司类,首先它会违反demeter法则.

Employee e = aCompany.Employees.Where(e => e.Id == 1).Single();
e.LastName = "MarriedName";
Run Code Online (Sandbox Code Playgroud)

或者这应该总是委托给公司

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

c# aggregate law-of-demeter

2
推荐指数
1
解决办法
388
查看次数

标签 统计

aggregate ×1

c# ×1

law-of-demeter ×1