Abbiamo un progetto di ricerca con il ciclo di sviluppo delle statistiche prototipo- e gt; Ad ogni modo, il nostro prodotto finale è un prototipo, quindi la suite di raccolta delle statistiche è non usato in modo persistente. Supponendo che abbia la seguente classe:
class Transform {
private:
someData;
public:
transformForward (inp_block, outp_block);
transformBackward (inp_block, outp_block);
};
Immagina di far parte di un grande sistema. Ho bisogno di raccogliere periodicamente alcune statistiche su tale trasformazione (anche i dati interni potrebbero essere considerati). Sembra che l'aggiunta di routine statistiche sarebbe una violazione del principio di responsabilità singola. Il secondo odore è che non voglio toccare il codice che usa Transform
istanze per invocare esplicitamente queste routine. Sarei meglio se potessi
attivare un qualche tipo di interruttore in modo che vengano raccolte le statistiche per quel modulo.
Ho incontrato questa sfida un numero di volte e ho la sensazione di reinventare costantemente la ruota. Esistono alcune buone pratiche per la configurazione e la raccolta della suite di statistiche per un sistema composto senza interferire con il suo codice interno?
UPDATE:
Come posso vedere dalle risposte proposte, la mia domanda è troppo aspecifica, quindi fornirò un esempio più concreto.
Considera un sistema di compressione delle immagini composto da due blocchi enormi : Predictor
e Encoder
. Ci sono molti algoritmi di predizione e compressione, durante la nostra ricerca abbiamo bisogno di esplorare il comportamento dei componenti in varie condizioni. Dovremmo rispondere a domande come "quante volte il pixel viene elaborato all'interno di ciascun contesto", "quanto bene funziona questo predittore", "in che modo ciascun predittore influenza lo stato interno di Encoder
" e molti altri.
In ogni caso, il nostro prodotto finale è solo un Codec con nessuna suite statistica fornita con esso; tutti i tipi di raccolta di statistiche vengono utilizzati internamente durante la nostra ricerca. Quindi sorge la domanda: come si può costruire un motore di statistica flessibile che conosca gli interni del sistema? Come si potrebbe mantenere il sistema stesso indipendente dal motore di statistiche?