Sono uno studente di buone pratiche, schemi architettonici e principi di progettazione. Ho studiato molto l'iniezione di dipendenza e l'inversione di controllo molto ultimamente, e ho "bevuto la koolade" abbastanza spesso con molti dei miei progetti nell'ultimo mezzo anno o giù di lì.
Recentemente, sono entrato in una discussione su questo con il mio capo. Mi ha chiesto di esporre le virtù dell'iniezione di dipendenza, in particolare per quanto riguarda il nostro ambiente specifico. Non è egli stesso uno sviluppatore, ma ha una spiccata capacità di comprendere linguaggi di programmazione e concetti correlati. In particolare, voleva che gli spiegassi perché usare l'iniezione di dipendenza era meglio che avere una libreria principale che funge da API. In altre parole, è così che tradizionalmente architettiamo un'applicazione, che ha al suo interno un modulo infrastruttura (accesso ai dati):
equestoècomepotrebbeapparireusandoDIP/DI
Lefreccediciascundiagrammarappresentanoovviamenteladirezionedelladipendenza.
Glihodettocheilcodiceconaccoppiamentolentoèsempremiglioreperchéconsentediscambiarecomponentisenzainfluenzarealtreareedell'applicazioneedoverriscrivereunsaccodicodiceperindirizzareinuovicomponenti.Hospiegatochelacodificasuun'astrazionepiuttostochesuun'APIconcretaerapreferibileperchéticostringeapensareinterminiditaleastrazioneequindiglielementispecificidiqualsiasiimplementazioneconcretasonomenoprobabiliafiltrareinaltrimoduli.Hoanchespiegatocheèpiùsemplicetestareicomponentiinisolamentoeutilizzareimockperisistemiesterni.
Impostandoilragionamentodiprovaaparteperilmomento,volevasapereperchénonpotevamosemplicementemodificareilmodulodell'infrastrutturasenzainfluiresullasuainterfacciapubblica.Adesempio,sedecidessimodipassaredaSQLServeraOraclecometecnologiadipersistenza,potremmosemplicementeapportaretalimodifichealmodulodiaccessoaidatieimodulisopradiessononsarebberopiùsaggi.
Nonavevounabuonarispostaperlui(oltreaivantaggiperitest).PoichéèimprobabilechepassiamodaSQLServeraOraclenelnostroambienteparticolare,tuttociòchepotevofareera"è solo la miglior pratica" e ribadire le ragioni che ho affermato prima.
Cos'altro avrei potuto dire per rafforzare la mia argomentazione?