Supponiamo di avere le seguenti classi:
Comepuoivedere,èun'implementazionedel
In sostanza, la classe Order trasmette le chiamate al metodo pay() e cancel() alla sua istanza concreta OrderState .
Dopo aver eseguito la propria parte della business logic, PendingOrderState e PaidOrderState chiamano setState sull'istanza Order per passare ad altro stato.
Question (s):
-
È un odore di codice, che l'API pubblica della classe
Orderè "inquinata" dasetState, un metodo che dovrebbe essere usato solo internamente dalle istanzeOrderState? -
Se la risposta alla domanda precedente è "Sì", allora come può
setStateessere incapsulato lontano da altri client della classe Order (come una classeCustomeripotetica, che riguarda solopayecancelmetodi diOrder)?
Soluzione possibile:
Una possibile soluzione che mi viene in mente è l'introduzione di una sorta di classe OrderWrapper , che includerebbe la classe Order e esponesse solo i metodi pay() e cancel() .
P.S
Ci scusiamo per il tentativo sciatto di UML:).
