Danyloff

Перенаправление из GRASP с примерами на PHP


  • ·

· ·

Перенаправление (Indirection) — это один из принципов проектирования, который помогает создавать гибкие и расширяемые системы. Он заключается в том, что классы и модули должны использовать промежуточный уровень индирекции, чтобы изменения в одном классе не приводили к изменениям в других классах.

GRASP (General Responsibility Assignment Software Patterns) — это набор паттернов проектирования, который помогает разработчикам создавать гибкие и расширяемые системы. Один из паттернов GRASP — это принцип Перенаправления.

Пример на PHP

Представим, что у нас есть класс Order, который отвечает за обработку заказов. У этого класса есть зависимость от класса Customer, который отвечает за информацию о клиенте. Если мы захотим изменить класс Customer, то это может привести к изменениям в классе Order, что нарушает принцип Перенаправления.

Чтобы решить эту проблему, мы можем использовать паттерн Фасад (Facade). Мы можем создать класс CustomerFacade, который будет предоставлять интерфейс для работы с классом Customer. Затем мы можем использовать класс CustomerFacade в классе Order, вместо использования класса Customer напрямую. Таким образом, класс Order будет зависеть только от класса CustomerFacade, а не от конкретной реализации класса Customer.

class Customer {
    private $name;

    public function __construct($name) {
        $this->name = $name;
    }

    public function getName() {
        return $this->name;
    }
}

class CustomerFacade {
    private $customer;

    public function __construct($name) {
        $this->customer = new Customer($name);
    }

    public function getName() {
        return $this->customer->getName();
    }
}

class Order {
    private $customerFacade;

    public function __construct(CustomerFacade $customerFacade) {
        $this->customerFacade = $customerFacade;
    }

    public function getCustomerName() {
        return $this->customerFacade->getName();
    }
}

$customerFacade = new CustomerFacade("John Doe");
$order = new Order($customerFacade);
echo $order->getCustomerName(); // Output: John Doe

В этом примере класс Order зависит только от класса CustomerFacade, а не от конкретной реализации класса Customer. Если мы захотим изменить класс Customer, то это не повлияет на класс Order.

Заключение

Таким образом, принцип Перенаправления помогает создавать гибкие и расширяемые системы. Использование паттернов проектирования, таких как Фасад, помогает реализовать этот принцип в практике.


Так же интересно

I из SOLID с примерами на PHP

Принцип разделения интерфейса (Interface Segregation Principle, ISP) является одним из пяти ключевых принципов объектно-ориентированного программирования в...

Согласование Laravel и DDD

Эта статья фокусируется на поиске общей основы для использования проектирования, ориентированного на предметную область (Domain-Driven Design или DDD) в...