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
, Но на этот раз все свойства покрыты.
Потому что ваш $p
требует больше информации о Point
чем это нужно:
В частности, объект должен избегать вызова методов объекта-члена, возвращаемого другим методом
Других решений пока нет …