Java qui. Ho sempre utilizzato Spring DI (per progetti Spring) o Guice (per progetti non Spring) per l'iniezione di dipendenza e li ho sempre amati.
Recentemente ho preso un lavoro dove fanno il 100% "fai da te DI". Cioè, la classe main / driver di ogni progetto ha un metodo init()
che crea per loro tutti gli oggetti / le fabbriche:
public class SomeApp {
private DatabaseService databaseService;
public static void main(String[] args) {
SomeApp someApp = new SomeApp();
someApp.run();
}
private void run() {
init();
// Now do some stuff (whatever SomeApp does).
}
private void init() {
SomeAppConfig someAppConfig = readFromFileSystemSomehow();
databaseService = new DatabaseServiceImpl(someAppConfig.getDatabaseInfo())
// ...etc.
}
}
Mi sento come se non ci fosse necessariamente sbagliato con questo DI DI , tuttavia mi sento come Guice e Spring DI esistere per un motivo, implementare le migliori pratiche di DI e gestire una varietà di situazioni migliori di quelle che qualsiasi soluzione di homegrown può gestire.
Vorrei provare a proporre Guice / Spring DI a questo team, ma prima voglio farlo in entrambi i casi:
- Assicurati di avere ragioni concrete / concrete per spiegare perché questi progetti open source esistono e funzionano meglio di una soluzione fai-da-te; o
- Forse modifica la mia visione del DI di DIY se è in effetti perfettamente soddisfacente e queste altre librerie (Guice / Spring DI / Weld / etc.) non sono realmente necessarie per le pratiche di DI appropriate
Quindi chiedo: Cosa si perde rinunciando a Guice / Spring DI / etc. e utilizzando una soluzione DI DI ? Qual è il costo opportunità?