Принципы проектирования классов SOLID в PHP
Принцип единственной обязанности (ответственности)(Single responsibility principle).
Этот принцип первый в списке принципов SOLID.
Обозначает, что любой объект должен иметь лишь одну обязанность и эта обязанность должна быть полностью реализована в классе объекта (инкапсулирована).
Из этого следует что должна быть одна причина чтобы вносить изменения в объект.
index.php
$product = new Product(); $product->setPrice(10); ...product.php
class Product { public function setPrice($price) { try { // save price in db } catch (DbException $e) { $this->logError($e->getMessage()); } } public function logError($error) { // save error message } }
Класс Product нарушает принцип единственной ответственности, так как он имеет две ответственности:
- 1) Работа с продуктом
- 2) Логирование ошибок
class Logger { public function log($message) { //... $this->saveToFile($message); } }
Теперь изменим файл index.php:
index.php$logger = new Logger(); $product = new Product($logger); $product->setPrice(10);Изменим класс Product:
product.php
class Product { private $logger; public function __construct(Logger $logger) { $this->logger = $logger; } public function setPrice($price) { try { // save price in db } catch (DbException $e) { $this->logger->log($e->getMessage()); } } }