Sono nel mezzo del refactoring di un progetto (in C ++ 11) e sto lottando con una decisione è bello cambiare enum enorme con circa 100
record per classi separate.
Questo enum è utilizzato in circa 4 posizioni nel codice in 4 diverse funzioni con enormi istruzioni switch. Per ogni enum, il record è un codice in ogni funzione.
Sto pensando di creare un'interfaccia e li implementano in classi, ma il numero di classi nel progetto aumenterà di 100. Ecco perché sono preoccupato se questo mi costerà un calo delle prestazioni o avrà un impatto enorme su utilizzo della memoria o avrà altre conseguenze. So che il codice sarà in condizioni migliori ma è anche molto importante che funzioni velocemente (non estremamente veloce) ma è un'applicazione server, quindi è un fattore importante.
Alcuni esempi di codice:
enum MyEnum {
RECORD_1,
RECORD_2,
...
RECORD_100
}
void doSomething(MyEnum en) {
switch (en) {
case RECORD_1: {
} break;
case RECORD_2: {
} break;
//...
case RECORD_100: {
} break;
};
}
void doSomethingElse(MyEnum en) {
switch (en) {
case RECORD_1: {
} break;
case RECORD_2: {
} break;
//...
case RECORD_100: {
} break;
};
}
Quindi sto pensando a creare un'interfaccia:
class AbstractInterface {
public:
virtual void doSomething() = 0;
virtual void doSomethingElse() = 0;
};
E quindi implementa questa interfaccia nelle classi:
class Record1 : public AbstractInterface {
public:
void doSomething() override;
void doSomethingElse() override;
};
//...
class Record2 : public AbstractInterface {
public:
void doSomething() override;
void doSomethingElse() override;
};
È un buon modo per refactoring questo tipo di codice in questo modo? e non diminuendo le prestazioni dell'applicazione?