- Ho un gioco che si occupa delle porte di apertura e chiusura e del motore della porta si occupa dell'interfaccia IDoor che ha contratti Open () e Close ()
- Fin qui tutto bene. il gioco è testato e funziona bene.
- Ora è necessaria una nuova funzionalità, le porte possono essere chiuse automaticamente con a timer, cioè un nuovo contratto: SetTimer () è necessario. Solo le parti del mio motore della porta devono occuparsi di impostare il timer, il resto di del codice non ha bisogno di impostare il timer, cioè la vecchia interfaccia IDoor è sufficiente.
Come lo faresti?
- Aggiungi l'interfaccia da
SetTimer()
aIDoor
? e implementare il metodo nelle classi derivate approp'ly, le classi Door esistenti possono avere un metodo dummy e il nostro speciale TimedDoor può avere un'attuazione appropriata. Inoltre, potresti avere un contratto "DoesSupportTimedClosing" per farlo perfetto LSP compatibile. - Rispetto ISP (so che l'ISP consente ai clienti di creare le loro implementazioni senza dover implementare l'intera interfaccia, ma possiamo considerare anche il mio codice interno come client, o ho una comprensione sbagliata) e creare una nuova interfaccia -
ITimedDoor : IDoor
(ITimedDoor avrà ilSetTimer
di contratto) è possibile creare delle timeddoors che implementano ITimedDoor, ma questa violazione di LSP? Se voglio un pezzo arbitrario di codice esistente per impostare un timer su una porta, dovrei fare controlli di tipo e digitare cast per chiamareITimedDoor.SetTimer()
sull'oggettoIDoor
che ha.
In una shell dado, se hai un'interfaccia - IInterface1
e codice esistente che è già stato testato e funziona bene, come gestiresti il requisito di aggiungere nuovi metodi ad esso?
Alcuni riferimenti su argomenti correlati: