Это нарушение закона Деметры? - PullRequest
2 голосов
/ 10 мая 2011

Является ли это нарушением Закона Деметры ?

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?         
}

Ответы [ 2 ]

0 голосов
/ 01 октября 2012

Если оно не нарушается, то оно слегка изгибает Закон Деметры.

Вы можете попробовать реализовать его таким образом, чтобы вы могли позвонить:

(...)
this.internalGrid.MoveEmptyCellBy(this.moveDistance);
(...)
0 голосов
/ 27 августа 2012

Закон Деметры говорит:

Более формально, закон Деметры для функций требует, чтобы метод m объекта O мог вызывать методы только следующих типов объектов:

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 не применяется.

...