Architettura e indipendenza della cipolla

2

Cercando di capire l'architettura della cipolla. A quanto ho capito, ci sono opinioni diverse sui nomi dei livelli.
In questo post mi riferisco ai livelli come: infrastructure -> api -> domain -> core .

Il concetto centrale è, come ho capito, che i livelli esterni possono conoscere gli strati interni, ma che l'interno non può sapere sull'esterno.

Domanda

La domanda che mi sembra è come gestire le dipendenze. Ho illustrato nell'esempio qui sotto la mia ipotesi. La domanda è se questa supposizione sia corretta, e alla fine faccio un punto perché ritengo che non lo sia.

Esempio

Una query DB. Il dominio ha una radice aggregata con un repository che recupera i dati da un gateway. Il gateway è un'interfaccia implementata da un adattatore per driver. L'adattatore si trova nell'infrastruttura, ha senso deve avere accesso al driver (ho letto comunque che gli adattatori dovrebbero andare nell'api) . Quindi il repository deve essere iniettato con un gateway, cioè un adattatore, dal controller attraverso l'aggregato che utilizza. Significa che il controller deve essere iniettato con un gateway.

Assunzione

  • Dominio
    • Aggregate
    • Repository - > restituisce un'entità, situata nel nucleo, insieme agli oggetti valore ecc.
    • Gateway (interfaccia)
  • Api
    • Controller - > iniettato con un gateway dall'infrastruttura
  • Infrastrutture
    • driver
    • Adattatore (implementa il gateway)

1.) Ciò significa che il dominio non può mai conoscere la struttura del database.

2.) Se disponiamo di più motori di persistenza, cosa che faccio nel mio caso, il controllore non può sapere quale degli adattatori utilizzare, non è a conoscenza di altro che del gateway. Quindi l'infrastruttura deve avere la conoscenza di quale adattatore iniettare dove e quando (mi sembra molto strano)

    
posta superhero 24.03.2016 - 17:22
fonte

1 risposta

1

In te Presupposti non fai distinzioni tra InfrastructureInterfaces e InfrastructureImplementation

Vedo questi strati

  • infrastrutturaInterfacce - > api - > dominio - > core - > App
  • infrastrutturaInterfacce - > infrastructureImplementation - > App

L'app conosce ogni cosa ed è responsabile di instaziare infrastrutturaInterfacce con InfrastrutturaImplementazione.

Dominio e Api devono solo conoscere il repositoryInterface mentre l'app inizializza Domain and Api con un concreto RepositoryImplementation

    
risposta data 24.03.2016 - 18:52
fonte

Leggi altre domande sui tag