Le interfacce sono i contratti che definiscono come un oggetto interagisce con gli altri oggetti presenti nel vostro sistema.
Quindi è sempre consigliabile sviluppare il vostro
codice partendo dalle interfacce.
Infatti, se come regola iniziate lo
sviluppo del vostro codice partendo dai test, potete implementare il
comportamento di una classe senza necessariamente definire il codice
per tutte le entità che interagiscono con l'oggetto che state
progettando.
Quando definire le interfacce non è vantaggioso?
Non ha senso definire una interfaccia quando:
- non scrivete un test che verifica l'interazione tra oggetti diversi;
- non avete la necessità di definire specializzazioni diverse che implementano la stessa interfaccia;
- usate dei value object;
In generale vi consiglio sempre di scrivere i test e di conseguenza
la definizione delle interfacce diventa "naturale".