In Doctrine, supponendo che voglio implementare diversi tipi di veicoli. Forse una macchina, un aereo, una bicicletta e così via ... tutti questi veicoli hanno molte proprietà diverse ma anche cose molto comuni come sono tutti fatti di un materiale.
Quindi, se voglio ottenere questo materiale ... dovrei implementare una classe astratta Vehicle
con una proprietà material
e implementare getter / setter o dovrei definire un'interfaccia IVehicle
e definire il getter / setter in per essere sicuri che ci sia davvero un metodo per ottenere e impostare il materiale? O dovrei anche usarli entrambi in combinazione?
Sembra "professionale" utilizzare l'interfaccia ... ma è sbagliato definire getter / setter nelle interfacce, quindi la mia sensazione personale è:
Non utilizzare interface
, usa solo abstract class
.
Ma l'approccio di classe astratto è protetto contro l'abuso? Per esempio su un altro posto mi aspetto sicuramente un tipo Material
che ritorna dalla funzione getMaterial()
... è l'approccio astratto della classe che salva anche per non restituire cose inaspettate complete (come fa l'interfaccia)?
Quindi se estendo questo veicolo per un'altra classe concreta, uno sviluppatore non dovrebbe essere in grado di restituire cose inaspettate, ma dovrebbe anche essere in grado di cambiare la logica nel metodo particolare se necessario.