[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Принципы SOLID, принцип Open-closed
clocwerk
Добрый день всем. Сейчас читаю статью про принципы SOLID, и пытаюсь разобраться, но вот что то не могу понять, вот пример, который приводит автор статьи:

class OrderRepository
{
private $source;

public function setSource(IOrderSource $source)
{
$this->source = $source;
}

public function load($orderID)
{
return $this->source->load($orderID);
}
public function save($order){/*...*/}
public function update($order){/*...*/}
}


interface IOrderSource
{
public function load($orderID);
public function save($order);
public function update($order);
public function delete($order);
}

class MySQLOrderSource implements IOrderSource
{
public function load($orderID);
public function save($order){/*...*/}
public function update($order){/*...*/}
public function delete($order){/*...*/}
}


class ApiOrderSource implements IOrderSource
{
public function load($orderID);
public function save($order){/*...*/}
public function update($order){/*...*/}
public function delete($order){/*...*/}
}


И после этого пишет коментарий:
Цитата
Таким образом, мы можем изменить источник и соответственно поведение для класса OrderRepository, установив нужный нам класс реализующий IOrderSource, без изменения класса OrderRepository.

Но... классы ApiOrderSource и MySQLOrderSource вобще никак не связаны с классом OrderRepository, не наследуются от него, ни клонируют и вобще не знают о его существовании, как тогда мы можем изменить поведение класса OrderRepository? Да и интерфейс IOrderSource тоже никак не связан с этим классом, ну кроме что метода setSource. Подскажите, пожалуйста, в чем я ошибаюсь?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.