这违反了Law of Demeter吗?
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?
}
答案 0 :(得分:0)
更正式地说,Demeter法则的功能需要一种方法 对象O的m只能调用以下类型的方法 对象:
O本身的m参数
任何创建/实例化的对象 在m中O的直接分量对象
一个全局变量, 可以通过O访问,在m的范围内(...)也就是说,代码a.b.Method()违反了法则 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不适用。
答案 1 :(得分:0)
如果没有断裂,那么它会略微弯曲德米特定律。
您可以尝试以某种方式实施它,以便您可以致电:
(...)
this.internalGrid.MoveEmptyCellBy(this.moveDistance);
(...)