Struttura della directory DDD per l'app MVC

2

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
    
posta alaric 17.09.2016 - 22:53
fonte

0 risposte

Leggi altre domande sui tag