====== Принцип единственной обязанности (ответственности)(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 нарушает принцип единственной ответственности, так как он имеет две ответственности:
- Работа с продуктом
- Логирование ошибок
//logger.php//
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());
}
}
}