User Tools

Site Tools


s

Принцип единственной обязанности (ответственности)(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. Логирование ошибок

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());
        }
    }
}
s.txt · Last modified: 2023/09/14 06:06 by 127.0.0.1