Stavo guardando uno dei video di Uncle Bob e ha richiamato l'interfaccia del database Strato. Aveva questo diagramma che lo mostrava:
QuestefreccemostranocheilDBInterfaceLayerèaconoscenzaechiamaillivelloApplicationeDatabase,manonviceversa.
IlDBInterfaceLayercontiene"record di dati". Queste sono "classi" che hanno il nome della tabella e i campi delle colonne. Questi sono quelli che di solito chiamano DTO. Ma questi record di dati hanno tutti i campi pubblici e nessun / pochi metodi.
Il livello dell'interfaccia DB è responsabile dell'acquisizione dei dati dal database, del popolamento dei "record di dati" e dell'implementazione di un'interfaccia nel livello applicazione in questo modo:
Sono un po 'confuso perché non ho mai sentito parlare di questa separazione prima. Ogni progetto su cui ho lavorato utilizza i DTO nella vista apparentemente sbagliata (almeno secondo il video di Uncle Bob).
Inoltre, non ho mai lavorato a un progetto in cui il DB Interface Layer chiama Application Layer. È sempre il livello applicazione che richiede il livello di interfaccia DB per informazioni. Ad esempio, utilizzando un DAO.
Ma sta iniziando a dare un senso. Ogni volta che uso l'ibernazione mi sto sempre tirando i capelli perché cerco di rendere le DTO più OO e la biblioteca mi combatte sempre.
Quindi, suppongo che cosa sto cercando di fare è, come appare il codice sul / al confine tra l'applicazione e il livello di interfaccia del database? Ad esempio, in che modo l'applicazione ottiene l'implementazione dell''attuazione del gateway dell'ordine? L'implementazione del gateway ordini è un DAO? Non ho una visione chiara di come il POS può utilizzare il Gateway ordine rispetto a come / quando il Gateway ordini viene popolato con i dati.