Dopo aver fatto un abbozzo di un modello di oggetto di alto livello, sto facendo un TDD iterativo e lasciando emergere gli altri oggetti come refactoring del codice (man mano che aumenta in complessità). (L'intero approccio può essere una discussione / argomento per un altro giorno.)
In ogni caso, sono al punto in cui sto cercando di ridefinire i blocchi di codice attualmente in un blocco if-else in oggetti separati. Questo perché esiste un'altra combinazione di valori che crea una nuova serie di sotto-rami logici.
Per essere più specifici, questa è una funzione del sistema di trading, in cui gli ordini di acquisto hanno un comportamento diverso rispetto agli ordini di vendita. Le risposte agli ordini hanno un campo indicatore numerico che descrive alcuni eventi che si sono verificati (ad esempio, riempire, cancellare). La combinazione di questo campo dell'indicatore numerico più se si tratta di un acquisto o di una vendita, richiede un'elaborazione diversa. Acquista il codice.
Creare una famiglia di oggetti per separare il codice per la gestione unica di ciascuna delle combinazioni dei 2 campi sembra una buona scelta a questo punto. Il modo in cui lo farei normalmente è creare un oggetto Factory che, richiamato con i 2 parametri rilevanti (indicatore, buysell), restituisca la sottoclasse corretta dell'oggetto. Alcune volte faccio questo modello con una mappa, che permette di cercare un'istanza dal vivo (o costruttore da usare tramite riflessione), e qualche volta faccio solo un codice rigido dei casi nella classe Factory.
Quindi - per qualche motivo questo non sembra un buon progetto (ad esempio un oggetto che conosce tutte le sottoclassi di un'interfaccia o un oggetto genitore) e un po 'goffo.
C'è un modello migliore per risolvere questo tipo di problema? E se questo approccio al metodo factory ha senso, qualcuno può suggerire un design più bello?