Estendere una classe per il debugging: API pubblica, implementazione nascosta o qualcos'altro?

0

Sto lavorando a un progetto abbastanza grande che prevede il disegno 3D e voglio aggiungere alcuni visualizzatori (ad esempio, per vedere i riquadri di delimitazione degli oggetti) per semplificare il debugging. Tuttavia, sto avendo un problema nel decidere come procedere.

Un'opzione sarebbe creare una funzione pubblica per disegnare i visualizzatori e chiamare questa funzione quando abilito il debug dall'interfaccia utente. Ciò avrebbe il vantaggio di non modificare le funzioni esistenti, ma di estendere la classe con una nuova funzione. Lo svantaggio sarebbe "creare dipendenze", come ha detto uno dei miei colleghi, avremmo bisogno di modificare la classe base e tutte le classi derivate per aggiungere questa funzione.

Un'altra opzione sarebbe quella di modificare la funzione di disegno esistente in modo che gestisca il disegno dei visualizzatori. Ciò nasconde i dettagli di implementazione, ma mi sembra anche che rende il codice meno modulare.

Ancora un'altra opzione è l'estensione della classe, l'aggiunta del visualizzatore nella funzione di disegno e lo swapping delle classi quando il debug è abilitato. I mixin sarebbero di aiuto, ma il C ++ non lo supporta.

Quale sarebbe l'approccio migliore per farlo? Sto cercando una soluzione modulare e rispetta i principi SOLID.

    
posta Nini Michaels 29.10.2014 - 10:15
fonte

1 risposta

1

Se vuoi SOLID, preferirei principalmente S (ingle Responsibility) e D (ependency Injection):

Ad esempio, per i riquadri di delimitazione:

  1. crea una classe astratta di base con il metodo, diciamo, drawBox .
  2. crea l'implementazione "regolare" (ad esempio, non esegue nulla) e le implementazioni di "debug".
  3. le tue classi utilizzeranno un'implementazione regolare per impostazione predefinita, ma consentiranno l'iniezione (tramite un costruttore / metodo o una fabbrica) di altre istanze.

Controlliamo

S: Ogni classe fa una sola cosa (la tua classe di business non ha una "modalità di debug" o una "modalità di produzione")

O: Se crei una nuova sottoclasse della classe astratta, non è necessario modificare le classi di attività per utilizzarla.

D: Beh, l'iniezione di dipendenza è il meccanismo utilizzato.

    
risposta data 29.10.2014 - 11:03
fonte

Leggi altre domande sui tag