Почему лучше обернуть (и несколько) код ради закона Деметры?

class Point
{
private $x, $y;

public __construction ($x, $y)
{
$this->x = $x;
$this->y = $y;
}

public function getX()
{
return $this->x;
}

public function getY()
{
return $this->y;
}
}

сначала я бы написал это:

class Item
{
private $point; // Point

public __construction()
{
$this->point = new Point(0,0);
}

public function getPoint()
{
return $this->point;
}
}

а потом:

$p = new Item();
$p->getPoint()->getX();

но они говорят, что это нарушает этот закон. После рефакторинга:

class Item
{
private $point; // Point

public __construction()
{
$this->point = new Point(0,0);
}

public function getPointX()
{
return $this->point->getX();
}

public function getPointY()
{
return $this->point->getY();
}
}

а потом:

$p = new Item();
$p->getPointX();

этот раз getPointX() а также getPointY() это просто избыточный метод «передачи». Я понимаю что ig Point имеет 1000 других методов, было бы небезопасно просто вернуть весь этот объект как return $this->point, Но на этот раз все свойства покрыты.

0

Решение

Источник

Потому что ваш $p требует больше информации о Point чем это нужно:

В частности, объект должен избегать вызова методов объекта-члена, возвращаемого другим методом

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]