Come strumento per apprendere e acquisire esperienza con il design basato sul dominio, sto ristrutturando / rifacendo una vecchia applicazione scritta in PHP che utilizza il framework Laravel 5.1. Di seguito è riportato un mock-up di una struttura semplificata che ho elaborato per iniziare il mio processo di refactoring che include, in parte, la struttura di directory predefinita "app" di Laravel 5.1 ( trovato qui ). Per maggiore chiarezza, le seguenti affermazioni possono aiutare a chiarire la struttura fornita:
- L'utente rappresenta una radice aggregata.
- La directory del dominio al di sotto delle radici aggregate conterrà qualsiasi entità, eventi, eccezioni e interfacce DAO / Repository.
- Anche se l'utente non è abbastanza complesso da suddividerlo directory, alcuni AR saranno ulteriormente suddivisi per aggregati nelle rispettive applicazioni, domini e infrastrutture le directory.
Le cose che ho discusso in modo specifico sono:
- Dove posizionare i listener di eventi, ( attualmente nelle directory dell'applicazione ).
- Dove collocare le funzionalità condivise, ( attualmente nella directory principale ).
- Indica se includere o meno le directory Http e Console / Cli al di sotto di ogni directory radice aggregata, ( attualmente mantiene tutto il framework specifico nella sua posizione predefinita ).
- Indica se posizionare directory di applicazioni / dominio / infrastruttura come directory di primo livello sotto ProjectName dir o (come ho fatto io), posizionali sotto le directory AR di primo livello.
Qualsiasi suggerimento e / o consiglio sulle migliori pratiche nella struttura dell'applicazione DDD è molto apprezzato.
app/
Console/
Exceptions/
Http/
Policies/
UserPolicy.php
ProjectName/
Core/
Application/
Domain/
Infrastructure/
User/
Application/
Listeners/
LogUserWasCreated.php
LogUserWasUpdated.php
Presenters/
UserProfilePresenter.php
Services/
CreateUserService.php
FindUserService.php
UpdateUserService.php
Domain/
Role.php
RoleDAO.php
User.php
UserDAO.php
UserNotCreated.php
UserNotFound.php
UserNotUpdated.php
UserWasCreated.php
UserWasUpdated.php
Infrastructure/
EloquentRoleDAO.php
EloquentUserDAO.php
Providers/
UserServiceProvider.php