2011-05-10 76 views
2

這是違反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

Law of 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不適用。

0

這是如果不破,那麼它是略微彎曲德米特法。

你可以嘗試的方式實現它,讓您可以撥打:

(...) 
this.internalGrid.MoveEmptyCellBy(this.moveDistance); 
(...)