Sto lavorando su un sistema in cui applichiamo coerentemente "schemi" o approcci come "Dependency Injection".
Preferirei non esporre l'attuale tecnologia di base per non ottenere soluzioni prevenute, perché penso che la mia domanda si applicherebbe a molte lingue e runtime diversi. È sufficiente dire che sto usando una piattaforma Object Oriented , dove ho lezioni, delegati e tutte le shenanigans attese in uno spazio linguistico moderno.
Durante lo sviluppo, ho seguito il seguente schema:
-
Ho una classe chiamata
ConfigurationProvider
che ha un metodo sempliceget
in cui puoi passarglisectionName
s, con cui puoi recuperare la configurazione in un modo molto disaccoppiato. La configurazione restituita da get è in realtà una struttura hash, modulo che il chiamante può quindi trasferire le chiavi di configurazione e recuperare i valori di configurazione. -
La maggior parte di alto livello
services
che mi aspetto di ricevere un'istanza di questo oggetto per poter accedere alla configurazione. In questo modo, sono in grado di configurarsi. Questo mi dà una certa flessibilità per spostare la configurazione (la struttura finale fornita a ciascun oggetto deve, ovviamente, essere rispettata) senza influenzare l'oggetto chiamante.
Facciamo un esempio:
ConfigurationProvider config = new ConfigurationProvider();
Cache cache = new Cache(config);
UserProfileService userProfileSvc = new UserProfileService(cache);
Come puoi vedere, tutti i dettagli della cache come host e porta, time-to-live predefinito ecc. sono completamente astratti. Gli utenti devono quindi seguire le regole di configurazione della cache. Ad esempio, la mia applicazione potrebbe avere un file di configurazione chiamato config.json
:
{
"cache": {
"host": "localhost",
"port": 5555,
"logErrors": true
}
}
Tuttavia, sorge un problema (o dovrei chiamarlo trade-off?). L'oggetto è ora abbinato a ConfigurationProvider
. Questo può essere in gran parte risolto reimplementando la sua interfaccia, in modo da poter passare qualsiasi configurazione che desideri come oggetto, ma è un sacco di problemi. Naturalmente, posso (e certamente dovrei) creare un sovraccarico costruttore che riceve la configurazione direttamente al posto del provider.
Sebbene possa sembrare che abbia risposto a qualsiasi domanda che potrei avere, la mia domanda è ancora la, c'è un modello, o almeno una convenzione, su questo argomento? È un anti-pattern?