Supponiamo che nella nostra applicazione vogliamo modellare le automobili. Vogliamo anche modellare un deposito di auto in cui immagazziniamo alcune auto registrate. Come dovrebbe essere modellato in scala?
Ecco il mio approccio: in primo luogo, creo una classe di casi PlainCar
. Questa è solo una macchina come esiste nel mondo reale, senza nulla di speciale. Successivamente creo un CarRepository
. Creo anche un RegisteredCar
. Il CarRepository
ora può memorizzare PlainCar
s e restituirli come RegisteredCar
s. Sia PlainCar
che RegisteredCar
estendono il tratto Car
che fornisce tutti i metodi di Comon come drive
. RegisteredCar
tuttavia è speciale - possiede un'istanza di PlainCar
ma aggiunge anche un metodo registrationNumber
che restituisce il numero di registrazione; tutti gli altri metodi sono solo delegati all'istanza PlainCar
.
Sento tuttavia che ci sono alcuni difetti di questo design. Uno è che devo cambiare RegisteredCar
quando aggiungo un metodo / proprietà a PlainCar
che penso non dovrebbe essere fatto.
La mia domanda è quindi, può essere modellato meglio e se sì, come? Ci sono altri svantaggi che mi mancano?
Alcuni consigli sulle convenzioni di denominazione sarebbero apprezzati anche perché PlainCar
mi sembra abbastanza imbarazzante.