Contesto
Io sono (parte del team A) lo sviluppo di una funzionalità che dipende dalle nuove API fornite dal team B. Le vecchie API (fornite anche dal Team B) sono presenti e questo è il modo in cui vengono utilizzate nel nostro codice. .
int someFunction() {
//-- lots of code here
oldAPI.func1();
//-- lots of code again
if (something)
oldAPI.func2();
else oldAPI.func3();
//lots of code
// ans so on
}
Avevamo bisogno di completarlo rapidamente, quindi ho appena modificato il flusso esistente per utilizzare newAPI e testato con alcune chiamate segnaposto.
Poco dopo aver completato ... la squadra B ci ha informato che ci vorrà più tempo.
Ora ho due opzioni ...
Opzione 1 : aspetta che la squadra B sia completata; spingere il tuo codice lungo / dopo di loro
Opzione 2 : fai in modo che il tuo codice supporti sia vecchio che nuovo; basato su una configurazione.
se scegliamo l'opzione 2; ci sono due approcci ...
Approccio 1 : modula il tuo codice; e usa il polimorfismo nel tuo codice.
class API_BASE {virtual funct1(),func2(),func3()};
class API_OLD : API_BASE {funct1(),func2(),func3()};
class API_NEW : API_BASE {funct1(),func2(),func3()};
Approccio 2 : utilizza la logica condizionale semplice
if (newAvailable)
useNew();
else
useOld();
Domande
- Se le possibilità di supportare più flussi in futuro sono molto meno (diciamo il 15%); ma è necessario sostenerli per qualche tempo (diciamo alcuni mesi), modificheresti un codice scritto in modo procedurale per supportare gli OOP? Vedo il vantaggio di manutenibilità, leggibilità e codice facile da estendere. Ma qual è il modo intelligente?
- Nella base di legacy legacy ... qual è il momento ideale per il codice refactoring? Tocca un file una volta all'anno e passa all'altro. Fornire che ho tempo ... dovrei refactoring un codice stabile / in esecuzione, o dovrei farlo quando c'è un reale bisogno di refactoring (come definire che non lo so)
- Nelle grandi società di software ... la squadra lavora nei propri confini. Se la squadra A completa il suo lavoro, vuole anticipare la produzione e annunciare al mondo (mgmt, team b) ecc. Che abbiamo finito. Fino a quando non avremo tutto pronto (vale a dire la parte A e la parte B), per l'utente finale (QA / cliente) non ci sono modifiche alla funzionalità. È un buon modo di pensare? dovrei concentrarmi di più sulla mia parte e lasciare che mgmt si preoccupi di un'immagine più grande?