SOLID принципи — це п'ять принципів проектування в об'єктно-орієнтованому програмуванні, які були введені Робертом С. Мартіном (Uncle Bob), щоб допомогти розробникам писати чистий, підтримуваний і масштабований код. Ось як ви можете застосувати ці принципи в проекті на Laravel, використовуючи систему управління замовленнями для електронної комерції як приклад.
Принцип єдиної відповідальності (SRP)
Клас або метод повинні мати одну відповідальність, тобто вони повинні виконувати лише одну конкретну задачу.
Приклад:
Ось клас PlaceOrderAction
, який відповідає за розміщення замовлень, і клас ProcessPaymentAction
, що відповідає за обробку платежів. Кожен клас дії має одну відповідальність.
Клас PlaceOrderAction:
// Код класу PlaceOrderAction
Клас ChangeOrderStatusAction:
// Код класу ChangeOrderStatusAction
Клас ProcessPaymentAction:
// Код класу ProcessPaymentAction
Принцип відкритості/закритості (OCP)
Клас повинен бути відкритим для розширення, але закритим для модифікацій. Це дозволяє додавати нову функціональність без зміни існуючого коду.
Приклад:
Додайте нові платіжні шлюзи без зміни існуючого коду класу ProcessPaymentAction
. Використовуйте інтерфейс PaymentGatewayInterface
для збереження узгодженості поведінки.
Інтерфейс PaymentGatewayInterface:
// Код інтерфейсу PaymentGatewayInterface
Імплементація PayPalGateway:
// Код імплементації PayPalGateway
Імплементація StripeGateway:
// Код імплементації StripeGateway
Принцип підстановки Ліскова (LSP)
Підкласи повинні бути взаємозамінними з їх базовими класами без порушення коректності програми.
Приклад:
Заміна реалізацій OrderRepository
відбувається без проблем завдяки використанню інтерфейсів CreateOrderInterface
і ChangeOrderInterface
.
Інтерфейс CreateOrderInterface:
// Код інтерфейсу CreateOrderInterface
Інтерфейс ChangeOrderInterface:
// Код інтерфейсу ChangeOrderInterface
Імплементація EloquentOrderRepository:
// Код імплементації EloquentOrderRepository
Імплементація NoSQLOrderRepository:
// Код імплементації NoSQLOrderRepository
Принцип розподілу інтерфейсів (ISP)
Клас не повинен бути змушений реалізовувати інтерфейси, які він не використовує. Великі інтерфейси повинні бути розділені на менші, більш специфічні.
Приклад:
Окремі інтерфейси для створення замовлень, оновлення статусу і генерації звітів.
Інтерфейс OrderCreationInterface:
// Код інтерфейсу OrderCreationInterface
Інтерфейс OrderStatusInterface:
// Код інтерфейсу OrderStatusInterface
Інтерфейс OrderReportInterface:
// Код інтерфейсу OrderReportInterface
Принцип інверсії залежностей (DIP)
Модулі високого рівня не повинні залежати від модулів низького рівня. Обидва повинні залежати від абстракцій.
Приклад:
Контролери залежать від абстрактних дій замість конкретних репозиторіїв або класів.
Клас OrderController:
// Код класу OrderController
Стаття пояснює застосування принципів SOLID в проекті електронної комерції на Laravel, сприяючи написанню чистого, підтримуваного коду. Вона використовує приклади, такі як PlaceOrderAction
та PaymentGatewayInterface
, щоб продемонструвати єдину відповідальність, розширюваність, розподіл інтерфейсів та абстракцію залежностей для створення масштабованого та тестованого дизайну.
Перекладено з: Applying SOLID Principles in a Laravel Project