Dove creo / istanziato i repository in DDD che vengono utilizzati i miei Servizi di dominio

0

Da quanto ho capito, un DomainService dovrebbe essere implementato su una RepositoryInterface, quindi potremmo cambiare facilmente il repository (che è parte del livello Infrastructure)

Quindi, se ho:

class UserService{

    function __construct(UserRepository $rep){
        $this->rep = $rep;
    }

    function createNewUser($attributes){
        return $this->rep->create($attributes)->persist();
    }
}

Significa che nel mio ApplicationService (alcuni lo chiamano Action) avrei:

'' '

class UserAplicationService{

    function create(UserCreateCommand $command){
        $service = new UserService(new UserRepoitory());
        $service->create($command->getAttributes())
    }
}

'' '

Ciò significa che ogni volta che utilizzo il mio DomainService devo istanziare il mio oggetto repository. Non rendere questo ApplicationServices accoppiato con l'implementazione del repository?

Domanda : dove devo creare un'istanza per gli oggetti del repository utilizzati nei servizi di dominio?

    
posta user237329 26.05.2016 - 17:21
fonte

1 risposta

1

Miško Hevery scrive spesso su Iniezione di dipendenza. video

La solita risposta è che istanziate il vostro oggetto repository quando collegate la vostra applicazione al vostro livello di persistenza: cioè, quando state assemblando il vostro grafico oggetto (in altre parole, durante la procedura di inizializzazione, prima di iniziare l'elaborazione delle richieste ).

UserRepository $repository = $frobozzMagicUserRepositoryFactory.create(...)
UserService $userService = new UserService($repository)
UserApplicationService $userApplicationService = new UserApplicationService($userService)
    
risposta data 26.05.2016 - 17:56
fonte

Leggi altre domande sui tag