Sono nuovo in DI e vorrei sapere come utilizzare DI per risolvere questo problema.
Se ho un ILatLongLocation
che implementa un Latitude
e Longitude
, allora dato due di questi posso produrre un Distance
usando una varietà di algoritmi, ma posso anche ragionevolmente sceglierne uno come algoritmo "migliore" in fase di progettazione senza perdita di sonno.
Tuttavia, poiché gli utenti inseriranno raramente le coordinate fisiche, potrei dover confrontare i codici postali o qualcosa di simile.
Ora, per risolvere i codici di avviamento postale con le coordinate, potrei applicare un algoritmo ingenuo che utilizza la concatenazione delle stringhe, ecc. per fare un'ipotesi approssimativa sulle coordinate fisiche, potrei scegliere un insieme casuale di coordinate, ecc. con ogni probabilità, avrò bisogno di risolvere i codici di avviamento postale usando una sorta di mappatura dei codici postali per le coordinate.
Quindi, essendo nuovo a DI, vorrei sapere se quanto segue è una ragionevole applicazione di DI e / o se lo sto pensando troppo.
ILocatable
ha ILatLongLocation
ILocatableProvider<T> : ILocatable
ha un T RawLocatable
e può restituire un ILatLongLocation
.
IZipCodeLocatableProvider : ILocatableProvider<string>
ha un string RawLocatable
e restituisce un ILatLongLocation
.
NaiveZipCodeLocatableProvider
è un'implementazione che utilizza solo modelli in codici postali noti per fornire un'ipotesi ottimale in merito alle coordinate.
DbZipCodeLocatableProvider
è un'implementazione che utilizza un database (magari attraverso un DbContext
o in qualche modo altro) per restituire le coordinate.
Ora DbZipCodeLocatableProvider
deve dipendere da qualche tipo di repository o contesto o connessione o qualcosa per accedere a un database (a meno che non sia letteralmente codificato) ... quindi questo significa che ho bisogno di avere un DbContext
o qualcosa di simile ... ecco dove mi perdo.
Sto pensando a questo nel modo giusto? Si tratta di uno scenario legittimo per l'iniezione di dipendenza? E come faccio a discriminare, diciamo diverse stringhe di connessione e diverse strategie per risolvere i codici postali in coordinate?
Modifica: ... e non dimenticare di WebServiceZipCodeLocatableProvider
... c'è un'altra opzione (realistica).