Beim Domain-Driven Design (DDD) liegt der Schwerpunkt auf der Organisation des Codes rund um die Geschäftsdomäne. In Laravel können Sie Ihre Dateien nach dem DDD-Ansatz strukturieren, indem Sie für jede Domäne oder jeden begrenzten Kontext einen Ordner erstellen. Dadurch wird Ihr Code modularer, wartbarer und skalierbarer. Hier sehen Sie ein Beispiel für eine DDD-Struktur in einem Laravel-Projekt:
app/
|-- Console/
|-- Exceptions/
|-- Http/
|-- Providers/
|-- Domain/ (or src/)
|-- Product/
|-- Models/
|-- Product.php
|-- Repositories/
|-- EloquentProductRepository.php
|-- ProductRepositoryInterface.php
|-- Services/
|-- ProductService.php
|-- Events/
|-- ProductCreated.php
|-- Policies/
|-- ProductPolicy.php
|-- Requests/
|-- CreateProductRequest.php
|-- UpdateProductRequest.php
|-- Resources/
|-- ProductResource.php
|-- Controllers/
|-- ProductController.php
|-- User/
|-- Models/
|-- User.php
|-- Repositories/
|-- EloquentUserRepository.php
|-- UserRepositoryInterface.php
|-- Services/
|-- UserService.php
|-- Events/
|-- UserRegistered.php
|-- Policies/
|-- UserPolicy.php
|-- Requests/
|-- CreateUserRequest.php
|-- UpdateUserRequest.php
|-- Resources/
|-- UserResource.php
|-- Controllers/
|-- UserController.php
config/
database/
public/
resources/
routes/
storage/
tests/
vendor/
In diesem Beispiel hat das Projekt zwei Domänen: Produkt und Benutzer. Jeder Domänenordner enthält relevante Modelle, Repositories, Dienste, Ereignisse, Richtlinien, Anforderungen, Ressourcen und Controller. Dieser Ansatz ermöglicht eine bessere Trennung von Belangen und hält die Codebasis sauber und organisiert.
Lesen Sie auch: Laravel Livewire-Kommentar-System
Denken Sie daran, die Namensräume in jeder Datei zu aktualisieren, damit sie der neuen Ordnerstruktur entsprechen. Vergessen Sie auch nicht, die PSR-4-Autoloading Konfiguration in composer.json
datei:
"autoload": {
"psr-4": {
"App\\": "app/",
"App\\Domain\\": "app/Domain/"
}
},
Nach der Änderung der composer.json
Datei, führen Sie composer dump-autoload
um die Autoloading-Dateien neu zu generieren.
Verwandte Seiten:
Handhabung von Routen in Laravel für DDD
Subdomain-Routen in Laravel für DDD