o
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| o [2022/03/09 13:21] – chifek | o [2023/09/14 06:06] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 36: | Line 36: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | |||
| + | // | ||
| + | |||
| + | < | ||
| + | class Logger { | ||
| + | private function saveToFile($message) { | ||
| + | //... | ||
| + | } | ||
| + | public function log($message) { | ||
| + | //... | ||
| + | $this-> | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | В данном примере мы имеем два класса. Класс Product который отвечает за работу с товаром. | ||
| + | И класс Logger цель которого логировать ошибки в текстовый файл. | ||
| + | |||
| + | Задача: | ||
| + | Сделать логирование не в текстовый файл, а в базу данных. | ||
| + | (либо логироваться в БД должен только класс Product, но другие классы, | ||
| + | должны логировать в файл как и прежде) | ||
| + | |||
| + | В данном примере, | ||
| + | Так как будем вынуждены модифицировать существующие классы. | ||
| + | Если функционал нашей системы не сложен, | ||
| + | но если система у нас большая, | ||
| + | |||
| + | Для того чтобы следовать принципу открытости/ | ||
| + | |||
| + | // | ||
| + | |||
| + | < | ||
| + | interface ILogger { | ||
| + | public function log(); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | // | ||
| + | |||
| + | < | ||
| + | class FileLogger implements ILogger { | ||
| + | |||
| + | private function saveToFile($message) { | ||
| + | //... | ||
| + | } | ||
| + | public function log($message) { | ||
| + | //... | ||
| + | $this-> | ||
| + | } | ||
| + | } | ||
| + | |||
| + | class DBLogger implements ILogger { | ||
| + | |||
| + | private function saveToDB($message) { | ||
| + | //... | ||
| + | } | ||
| + | public function log($message) { | ||
| + | //... | ||
| + | $this-> | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | // | ||
| + | |||
| + | < | ||
| + | protected $logger; | ||
| + | |||
| + | public function __construct(ILogger $logger) { | ||
| + | $this-> | ||
| + | } | ||
| + | |||
| + | public function setPrice($price) { | ||
| + | try { | ||
| + | // save price in db | ||
| + | } catch (DbException $e) { | ||
| + | $this-> | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | // | ||
| + | |||
| + | < | ||
| + | $logger | ||
| + | $product = new Product($logger); | ||
| + | $product-> | ||
| + | </ | ||
| + | |||
o.1646832118.txt.gz · Last modified: 2023/09/14 06:06 (external edit)