Solo qualche esperienza personale, io uso questa architettura di cui Eric Anche DDD libro:
In breve:
1) Interfacce è costituiti da componenti che sono responsabili per l'interazione con l'utente (un vero e proprio punto finale utente o una macchina remota), controller web mvc, oggetto vista Web, ad esempio facciata remota.
2) L'applicazione definisce le funzionalità fornite dal sistema. Penso che sia molto accoppiato con il livello Interfaces. Se si definisce un metodo in Applicazione, spesso è necessario aggiungere anche una classe/metodo Interfaces. Ma diverse classi/metodi di interfacce possono dipendere dallo stesso oggetto Application, ad esempio si fornisce sia un Web Ui sia un servizio Web per l'ordine del posto.
3) Dominio, la parte più stabile del sistema. Ad esempio, nel contesto linguistico, parola/frase sono oggetti Dominio che hanno il loro significato, li ho organizzati per formare questa risposta. Quindi potresti considerare me come un oggetto Application anche se non buono perché non parlo fluentemente l'inglese: P
4) Infrostruttura, in realtà non penso che questo sia uno strato, implementa tutti i tre precedenti . Ad esempio, hai un'interfaccia OrderRepository nel tuo livello di dominio e potresti implementarla utilizzando un framework orm (infrastruttura di persistenza). La maggior parte dei miei oggetti infrastruttura sono adattatori (implementa un'interfaccia nel livello Applicazione/Dominio/Interfacce e si adattano a componenti esterni come database, provider di messaggi, server di posta elettronica e così via).
Spero che questo aiuti.
Aggiornamento per intento infrastrutture:
Questo è uno di vista pacchetto del nostro progetto.
ci sono alcuni adattatori a livello di infrastruttura:
1.infrastructure.channel.XXX ogni pacchetto contiene diversi adattatori a un particolare fornitore di pagamento online.
2.infrastructure.payment contiene adattatori per un sistema di pagamento della nostra organizzazione ma si trova in un altro contesto limitato. Usiamo MakePaymentService (un servizio di dominio) per disaccoppiare il sistema di pagamento da un'altra parte di questo sistema.
3.infrastructure.messaging contiene gli adattatori per provider di messaggistica, forniamo un JMS implementare per PaymentWasMadeNotifier (un servizio applicativo)
4.infrastructure.persistence contiene gli adattatori per banca dati, mettiamo a disposizione un iBATIS (un quadro ORM in Java) per i repository di dominio.
Questi adattatori sopra tutti implementano alcune interfacce in livelli Application/Domain. Di seguito alcune "servizio", ma sono generiche:
5.infrastructure.mail
6.infrastructure.logging
7.infrastructure.security
Questi pacchetto di cui sopra espone alcune interfaccia e implementazioni. Ad esempio, forniamo un'interfaccia MailManager, è agnositico a particolari caratteristiche. L'oggetto, il contenuto è a livello di applicazione/livello dominio. Forniamo un'implementazione usando javamail nello stesso pacchetto.
public interface MailManager {
void send(String subject, String content);
}
8.infrastructure.time questo è speciale, abbiamo qualche lavoro cron in questo sistema, in modo da introdurre un orologio per disaccoppiare il tempo da lavoro e quindi la sua impostazione amichevole per i test (Provate a immaginare che abbiamo un lavoro, dovrebbe essere lanciato il 25, ogni mese, possiamo testare il lavoro impostando il tempo corrente al 25, anche se è il 1 ° oggi). Forniamo un'implementazione nel pacchetto di persistenza (per alcuni motivi, abbiamo bisogno di usare il database' ora in produzione)
public interface Clock {
Date now();
}
Quindi la mia comprensione è: infrastruttura fornisce servizi/implementazioni per gli altri tre strati, ma sono tecnologia specifica . Ad esempio, Oggetto, contenuto, da, a, cc sono modelli di dominio nel contesto di invio, ma sono infrastrutture nel contesto del dominio. Il livello infrastruttura li separa per te.
Ho letto l'ultimo articolo che hai collegato Sembra avere molte somiglianze con la risposta di Hippoom. Ma non capivo perché alcuni livelli avessero "Servizi" nel loro nome. Servizi di dominio, servizi di applicazione. Vorresti spiegarmi il significato, per favore? –
servizi di dominio e servizi applicativi su quel link si distinguono per la stessa cosa di dominio e lo strato di applicazione non in risposta di Hippoom. È solo nominare la differenza di conversione. I servizi di applicazione e i dettagli del servizio di dominio sono stati inclusi nella parte inferiore della mia risposta a causa del limite di parole nel commento qui. Grazie. –
Grazie per la risposta. Credo di avere tre ultime domande. A cosa serve il livello di infrastruttura, cosa dovrebbe contenere? Dove va la logica di presentazione (è l'interfaccia utente/presentazione/livello interfacce)? –