Sto scrivendo una piccola classe C ++, Block , per trasformare i dati serializzati in una struttura di memoria e fornire i dati strutturati ai chiamanti attraverso diversi metodi di accesso. Ho cercato di mantenere il suo ambito specifico e limitato. Gli utenti della classe sono di livello molto basso, anch'essi sono molto focalizzati e hanno il minor numero possibile di dipendenze esterne.
Questo è il modo in cui mi è stato insegnato a progettare le cose, se possibile. Riducendo al minimo le dipendenze e il featurism strisciante, è più facile testare l'unità e più facile da riutilizzare.
Il problema è che la mia classe dipende dalla classe di qualcun altro, Metadata . Anch'essa fa una cosa molto specifica: legge i dati che definiscono le caratteristiche del flusso di dati che trasformerò da una tabella di database e me la passerà. La sua classe controlla gli errori mySQL, che dovrebbero essere rari e registra eventuali errori su un oggetto Log .
Questo oggetto Registro viene visualizzato in tutte le applicazioni della nostra azienda. Istanziare è un grosso problema: vuole numeri di lavoro, vuole molte informazioni di configurazione dal database che normalmente vengono messe in produzione dagli account manager usando una GUI. Devi fare molto lavoro prima che il tuo programma possa istanziare il Log. Eppure questa minuscola classe di basso livello ( Metadata ) con un piccolo compito vuole che venga passata, da me. Il mio oggetto non ha certamente alcun business che istanzia il registro , quindi devo prenderlo come parametro da chiunque mi chiami. E così via, su per la gerarchia chiamante.
Posso capire perché la direzione vuole che una classe incapsuli e standardizzi la registrazione dei messaggi. Ma la necessità che venga passata a, e attraverso, quasi ogni metodo è estremamente brutto, e rende molto più difficile il testing e il riutilizzo.
Questo tipo di problema deve essere abbastanza comune. Come può essere fatto senza ingombrare la firma di ogni metodo che scrivi? È un caso legittimo per i Globali? Esiste qualche tipo di approccio orientato agli oggetti? E questo è un God object ?