Sto lavorando al refactoring di un'applicazione legacy in cui ho implementato correttamente il pattern State come mostrato nello schema seguente:
Comevedic'èuncomportamentocomunetrai3stati,quindihodecisodiestrarreilmetodocomuneRefund()
inunaclasseastrattagenitoreRefundableState
dovel'hoimplementata:
Refactoring ulteriormente noto che il metodo Ship()
è comune tra i 2 stati Cancelled
e NewOrder
, quindi vado per un altro giro di estrazione del comportamento comune a un'altra classe genitore ShippableState
:
Ora ho bisogno del mio stato Cancelled
per estendere 2 classi e nello stesso tempo non posso raggruppare la funzione Refund()
e Ship()
insieme poiché non tutti gli stati permettono le 2 azioni.
Come posso risolvere questo problema?
Note:
- Questa domanda riguarda principalmente l'applicazione di DRY e il refactoring non su come implementare il pattern di stato.
- Sto usando PHP 5.3, ma sono aperto a qualsiasi altra lingua.