Diciamo che sto avendo un modello di dominio e voglio leggerlo e salvarlo da qualsiasi livello di persistenza - in questo momento potrebbe essere un file JSON ma in futuro potrebbe essere xml o un database (che potrebbe anche cambiare nel suo tipo).
Per generare il modello di dominio dal livello di persistenza, ho un'implementazione di una semplice interfaccia che, diciamo, contiene un metodo getAll()
e saveAll()
. Se voglio passare a un altro tipo di persistenza, posso semplicemente modificare l'implementazione dell'interfaccia. Tuttavia, all'interno dell'implementazione userò soluzioni completamente diverse per leggere e archiviare i dati, quindi dovrò utilizzare oggetti diversi da altre librerie per gestire i dati.
Diciamo che uso un serializzatore Json nella prima implementazione, quindi istanzerò direttamente l'istanza di quel serializzatore nella mia implementazione. Questo porterà quindi alla mia implementazione direttamente a seconda di quel serializzatore, non potrò mai darlo un altro. Ma questo non sarebbe comunque possibile, perché non esiste un'interfaccia universale per i serializzatori (o qualunque tipo di persistenza). Quindi, se voglio usare un serializzatore diverso, l'unica cosa che posso fare è scrivere un'implementazione completamente nuova invece di passarne un'altra dall'esterno.
Quindi va bene alle dipendenze del codice hardware in questo caso? O c'è un'opzione migliore?