2

这是违反得墨忒耳法则吗?

private void MoveEmptyCells()
{
     IEnumerable<Cell> cells = this.internalGrid.GetAllEmptyCells();
     foreach(Cell cell in cells)
     {
          cell.RowIndex += this.moveDistance; // violation here?
     }
}

这个怎么样?

private void MoveEmptyCell()
{
     Cell cell = this.internalGrid.GetEmptyCell();
     cell.RowIndex += this.moveDistance; // violation here?         
}
4

2 回答 2

0

如果不是打破,那就是在轻微弯曲德墨忒耳法则。

您可以尝试以某种方式实现它,以便您可以调用:

(...)
this.internalGrid.MoveEmptyCellBy(this.moveDistance);
(...)
于 2012-10-01T14:08:24.690 回答
0

得墨忒耳法则说:

更正式地说,函数的得墨忒耳定律要求对象 O 的方法 m 只能调用以下类型对象的方法:

O 本身
m 的参数在 m O 的直接组件对象
中创建/实例化的任何对象一个全局变量,可由 O 访问,在 m 的范围内


(...) 也就是说,代码 abMethod() 违反了 a.Method() 没有的法律。

Cell cell = this.internalGrid.GetEmptyCell(); // is O's direct component Object
cell.RowIndex += this.moveDistance; // Cell is a object created/instantiated within m

this.moveDistance; // 方法 // O 本身。
返回没有行为的 RowIndex 对象,因此 Demeter 不适用。

于 2012-08-27T12:32:10.027 回答