Skip to content

ООП в Laravel

В Laravel-проектах использовал объектно-ориентированный подход на уровне зависимостей, прикладных сервисов, событий, очередей и структуры application-кода.

Что использовал на практике

  • Service Container и внедрение зависимостей в контроллерах, handler-ах, listener-ах, job-ах;
  • разделение кода по ролям: controllers, services, repositories, DTO, events, jobs, form requests;
  • вынос прикладной логики из контроллеров в отдельные классы и сценарии;
  • применение ООП-паттернов в инфраструктурном и прикладном коде;
  • переход от простого CRUD-подхода к use-case ориентированной структуре.

1. Service Container

Использовал контейнер для автоподстановки зависимостей и замены реализаций по интерфейсу.

php
public function __construct(UserRepository $repo) {}

2. Facade

Применял фасады как короткий интерфейс к инфраструктурным подсистемам: Cache, DB, Log, Auth, Queue, Storage.

3. Singleton

Регистрировал singleton-сервисы для общих инфраструктурных объектов и обвязки над внешними клиентами.

php
$this->app->singleton(Logger::class, fn () => new Logger());

4. Factory Method

Использовал фабричные методы для создания объектов через framework API, когда логика создания инкапсулирована внутри фабрики или базового класса.

php
User::factory()->create();

5. Builder

Работал с builder-подходом в Query Builder, Eloquent Builder, Route Builder.

php
User::where('active', true)
    ->orderBy('id')
    ->limit(10)
    ->get();

6. Observer

Использовал Model Observers, Events & Listeners для реакций на изменения моделей и доменных событий.

php
User::created(fn ($user) => Log::info('User created'));

7. Strategy

Применял выбор стратегии для кэша, хранения файлов, интеграций и других конфигурируемых сервисов.

env
CACHE_DRIVER=redis
CACHE_DRIVER=file

8. Adapter

Использовал адаптеры для унификации внешних интерфейсов и замены конкретной реализации без переписывания прикладного кода.

php
Storage::disk('s3')->put('file.txt', 'data');
Storage::disk('local')->put('file.txt', 'data');

9. Command

Выделял отдельные классы действия для Artisan-команд, Job-ов и прикладных use-case сценариев.

10. Template Method

Использовал extension points во встроенных базовых классах Laravel, например в FormRequest, Notification, Resource, Command.

php
class StoreUserRequest extends FormRequest {
    public function rules(): array {}
}

11. Decorator

Применял декоратор-подход в middleware, кэширующих обёртках и дополнительном поведении вокруг сервисов.

php
Route::middleware(['auth', 'verified'])->group(...)

12. Chain of Responsibility

Использовал цепочки обработки в:

  • HTTP middleware pipeline;
  • валидации запросов;
  • авторизации и последовательных проверках доступа.

13. Proxy

Работал с lazy-resolved и proxy-подходами в:

  • facade-объектах;
  • сервисах, разрешаемых через контейнер;
  • Eloquent-связях с lazy loading.

См. также

Сайт обновлен и проверен: