Sto lavorando con una libreria (da una fonte online, non creata in-house) che fornisce un'interfaccia e un'implementazione di essa:
interface FooInterface {
// ...
}
class Foo implements FooInterface {
// ...
}
Non sono soddisfatto dell'implementazione predefinita, Foo
, quindi posso sempre scrivere qualcosa del tipo:
class MyFoo implements FooInterface {
// ...
}
Tuttavia, le modifiche che voglio sono molto piccole; e infatti, se qualche nuovo comportamento / caratteristica arriva in una versione aggiornata della libreria, questo è desiderato a meno che non ci sia una buona ragione per non farlo. A questo punto, ho due scelte:
- Duplica l'interezza di
Foo
inMyFoo
ad eccezione delle parti modificate e tienilo aggiornato di volta in volta con le modifiche nella libreria. - Eredita
Foo
inMyFoo
e apporta modifiche minime inMyFoo
.
Quale delle due pratiche precedenti sarebbe incoraggiata dal punto di vista dell'ingegneria del software?