0

是否允许根据得墨忒耳定律调用组件的组件?

我所说的组件是指一个对象

  • 这是“排他地”注入容器或在容器中创建的

  • 与它的容器具有相同的生命周期

例如,Brain是 a 的一个组成部分Dog

partial class Dog
{
    private readonly IBrain brain;

    public Dog(IBrain brain)
    {
        this.brain = brain;
    }
}

这是我找到的一些信息:

http://c2.com/cgi/wiki?LawOfDemeter

您的方法可以直接在其自己的字段上调用方法(但不能在字段的字段上)


消息目标只能是以下对象之一:

...对象的属性引用的对象

http://www.ccs.neu.edu/research/demeter/demeter-method/LawOfDemeter/paper-boy/demeter.pdf

一个对象的方法应该只调用以下几种对象的方法:

...

它创建/实例化的任何对象

它的直接组件对象


这是一个案例:

partial class Dog
{
    public void Command(string cmd)
    {
        var movement = brain.GetMemory().GetMovement(cmd);

        skeleton.ExecuteMovement(movement);
    }
}
4

1 回答 1

1

是否允许根据得墨忒耳定律调用组件的组件?

根据定义,这是不允许的,因为您应该只与您的直系朋友交谈

换句话说,IBrain服务不应通过其接口公开其内部服务(假设GetMemory()返回某种IMemory服务)。取而代之的是,IBrain接口应该提供一种方法来允许检索运动 - 或 - IMemory should be injected directly intoDog`。

于 2014-05-06T13:25:25.890 回答