是否允许呼叫组件'根据德米特定律的组件?
按组件我的意思是一个对象
这是"专属"注入容器或创建于 容器
与其容器具有相同的生命周期
例如,Brain
是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);
}
}
答案 0 :(得分:1)
是否允许呼叫组件'根据德米特定律的组件?
根据定义,这是不允许的,因为你应该Only talk to your immediate friends。
换句话说,IBrain
服务不应通过其接口公开其内部服务(假设GetMemory()
返回某种类型的IMemory
服务)。相反,IBrain
接口应该提供一种允许检索运动的方法 - 或者IMemory should be injected directly into
Dog`。