Abbiamo un progetto C ++ gestito dal software UML, che genera codice per la creazione di istanze e il passaggio di dati tra oggetti. Sfortunatamente, questo software aggiunge un sacco di spese generali alle nostre build e allo sviluppo, quindi stiamo cercando di migrare il nostro codice da esso e di eliminare il passaggio di generazione.
Il codice generato ha classi contenitore costruiscono gli oggetti e quindi duplica le interfacce in modo che i metodi interni siano esposti esternamente:
class iMessageTx {
public:
virtual void sendMessage(const std::string& message) = 0;
};
class networkTx : public iMessageTx {
public:
void sendMessage(const std::string& message) { /* send message */ }
};
class networkStack : public iMessageTx {
private:
networkTx itsNetworkTx;
public:
networkStack() { itsNetworkTx = new networkTx(); }
void sendMessage(const std::string& message) { itsNetworkTx.sendMessage(message); }
};
class hardwareLayer : public iMessageTx {
private:
networkStack itsNetworkStack;
public:
hardwareLayer() { itsNetworkStack = new networkStack(); }
void sendMessage(const std::string& message) { itsNetworkStack.sendMessage(message); }
};
Questo è molto da mantenere a mano, per non parlare del debug attraverso. Mi sembra sbagliato, come questo non è un buon modello di design.
Ci sono schemi comuni in C ++ che sono usati per istanziare oggetti e orchestrare la comunicazione tra loro? Sposteremmo il nostro codice dal software UML un po 'alla volta, quindi non dobbiamo basare la nostra riscrittura sull'output generato.