Розуміння та застосування принципів об’єктно-орієнтованого програмування в реальному світі на прикладі фреймворку Laravel: Практичний посібник

OOP приклади з такими об'єктами, як "книга", "тварина" або "автомобіль", часто бувають надмірно спрощеними і можуть здаватися відірваними від реальної розробки бекенду. Щоб подолати цей розрив, давайте зосередимося на практичних, реальних принципах OOP в контексті фреймворку Laravel.

pic

1. Зрозумійте основи OOP

  • Інкапсуляція: Залишайте дані та методи приватними для кращого контролю та зменшення помилок.
    Приклад: Використовуйте моделі для інкапсуляції бізнес-логіки, що стосується взаємодії з базою даних.
  • Спадкування: Спільні поведінки серед пов'язаних класів.
    Приклад: Створіть базовий клас Notification з спільним функціоналом і розширте його для конкретних повідомлень.
  • Поліморфізм: Пишіть код, який працює з об'єктами різних типів взаємозамінно.
    Приклад: Використовуйте інтерфейси для впровадження залежностей (наприклад, PaymentGatewayInterface для різних платіжних систем).
  • Абстракція: Визначайте основні поведінки та приховуйте деталі реалізації.
    Приклад: Абстрагуйте контролери для загальних операцій CRUD.

2. Реальні приклади OOP в Laravel

Перетворимо ці концепції на практичні приклади в Laravel:

a. Інкапсуляція з моделями

  • Використовуйте моделі для обробки бізнес-логіки:
class Order extends Model  
{  
 public function calculateTotal()  
 {  
 return $this->items->sum(fn($item) => $item->price * $item->quantity);  
 }  

 public function markAsPaid()  
 {  
 $this->update(['status' => 'paid']);  
 }  
}

b. Спадкування з базовими класами

  • Використовуйте базовий контролер для спільної логіки:
class BaseController extends Controller  
{  
 protected function jsonResponse($data, $message = 'Success', $status = 200)  
 {  
 return response()->json([  
 'message' => $message,  
 'data' => $data,  
 ], $status);  
 }  
}  

class ProductController extends BaseController  
{  
 public function show($id)  
 {  
 $product = Product::findOrFail($id);  
 return $this->jsonResponse($product, 'Product retrieved');  
 }  
}

c. Поліморфізм з інтерфейсами

  • Реалізуйте платіжну систему:
interface PaymentGateway  
{  
 public function charge($amount);  
}  

class StripePayment implements PaymentGateway  
{  
 public function charge($amount)  
 {  
 // Логіка для Stripe  
 }  
}  

class PayPalPayment implements PaymentGateway  
{  
 public function charge($amount)  
 {  
 // Логіка для PayPal  
 }  
}
  • Впровадьте залежність:
class PaymentService  
{  
 protected $gateway;  

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

 public function processPayment($amount)  
 {  
 return $this->gateway->charge($amount);  
 }  
}

d. Абстракція з репозиторіями

  • Розділяйте логіку доступу до даних від контролерів:
interface UserRepositoryInterface  
{  
 public function findByEmail(string $email): User;  
}  

class EloquentUserRepository implements UserRepositoryInterface  
{  
 public function findByEmail(string $email): User  
 {  
 return User::where('email', $email)->firstOrFail();  
 }  
}  

// Реєструємо інтерфейс у сервіс-постачальнику  
app()->bind(UserRepositoryInterface::class, EloquentUserRepository::class);

3. Висновки:

З цієї статті ви зрозуміли основи OOP і практичний, реальний приклад у фреймворку Laravel. Удачі в кодингу 🙂

Перекладено з: Understanding and Applying Real-World OOP Principles in Laravel Framework : A Practical Guide

Leave a Reply

Your email address will not be published. Required fields are marked *