Прямой компонентный объект

Я не понимаю, что означает прямая составляющая объекта в контексте статьи закона Деметры. Как я вижу, термин был взят из статьи Дэвида Блока. Итак, что такое термин и где я могу получить примеры из жизни и больше информации о нем?

1 ответ

Прямые компонентные объекты в этом случае являются переменными-членами класса. Например:

class MyClass
{
    IService service;

    public MyClass(IService service)
    {
        this.service = service;
    }

    public void MyMethod(Param param)
    {
        // O itself
        this.AnotherMethod();

        // m's parameters
        param.Method1();

        // Any objects created/instantiated within m
        TempObject temp = new TempObject();
        temp.DoSomething();

        // O's direct component objects
        service.ProvideService();

        // violates Law of Demeter
        service.GetConfig().Update();
    }

    private void AnotherMethod()
    {
        ...
    }
}

В этом примере показаны различные вызовы методов, которые считаются соответствующими закону Деметры. Переменная-член service в данном случае это прямой компонент объекта.

Другие вопросы по тегам