ООП в Laravel
В Laravel-проектах использовал объектно-ориентированный подход на уровне зависимостей, прикладных сервисов, событий, очередей и структуры application-кода.
Что использовал на практике
Service Containerи внедрение зависимостей в контроллерах, handler-ах, listener-ах, job-ах;- разделение кода по ролям: controllers, services, repositories, DTO, events, jobs, form requests;
- вынос прикладной логики из контроллеров в отдельные классы и сценарии;
- применение ООП-паттернов в инфраструктурном и прикладном коде;
- переход от простого CRUD-подхода к use-case ориентированной структуре.
1. Service Container
Использовал контейнер для автоподстановки зависимостей и замены реализаций по интерфейсу.
public function __construct(UserRepository $repo) {}2. Facade
Применял фасады как короткий интерфейс к инфраструктурным подсистемам: Cache, DB, Log, Auth, Queue, Storage.
3. Singleton
Регистрировал singleton-сервисы для общих инфраструктурных объектов и обвязки над внешними клиентами.
$this->app->singleton(Logger::class, fn () => new Logger());4. Factory Method
Использовал фабричные методы для создания объектов через framework API, когда логика создания инкапсулирована внутри фабрики или базового класса.
User::factory()->create();5. Builder
Работал с builder-подходом в Query Builder, Eloquent Builder, Route Builder.
User::where('active', true)
->orderBy('id')
->limit(10)
->get();6. Observer
Использовал Model Observers, Events & Listeners для реакций на изменения моделей и доменных событий.
User::created(fn ($user) => Log::info('User created'));7. Strategy
Применял выбор стратегии для кэша, хранения файлов, интеграций и других конфигурируемых сервисов.
CACHE_DRIVER=redis
CACHE_DRIVER=file8. Adapter
Использовал адаптеры для унификации внешних интерфейсов и замены конкретной реализации без переписывания прикладного кода.
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.
class StoreUserRequest extends FormRequest {
public function rules(): array {}
}11. Decorator
Применял декоратор-подход в middleware, кэширующих обёртках и дополнительном поведении вокруг сервисов.
Route::middleware(['auth', 'verified'])->group(...)12. Chain of Responsibility
Использовал цепочки обработки в:
- HTTP middleware pipeline;
- валидации запросов;
- авторизации и последовательных проверках доступа.
13. Proxy
Работал с lazy-resolved и proxy-подходами в:
- facade-объектах;
- сервисах, разрешаемых через контейнер;
Eloquent-связях с lazy loading.