How do we think in terms of interfaces for everything when we are writing code?
NON LO
Alcune delle altre risposte hanno toccato il giusto corso di progettazione, ma l'assunto non dichiarato nella domanda è sottile e imperfetto e merita di essere trascinato a calci e urla nella dura luce del giorno .
SCRIVI PRIMA IL TEST
È comune leggere su TDD e pensare "sì, è una grande idea" e poi non farlo . Invece, è facile ricorrere alle prime abitudini del codice e poi chiedersi come si suppone di dover pensare a tutte le interfacce necessarie e convenienti mentre si scrive il codice. Non farlo!
NO, SRSLY, SCRIVI PRIMA IL TEST
Scrivere il test prima ti costringe a inventare l'interfaccia prima tu scrivi il codice. Quindi non stai pensando al codice affatto , stai pensando all'interfaccia per testare il codice.
TDD NON È UN TEST DI UNITÀ
TDD esegue il test delle funzioni, non delle unità. Sentiti libero di aggiungere test unitari e copertura del codice se vuoi, ma tutto ciò che TDD richiede è che ogni funzione abbia test automatici. [Ma guarda in BDD per una specifica di test ancora più semplice]
rosso-verde-refactoring
Questo processo creerà le interfacce, farà funzionare il codice, quindi perfezionerà le interfacce e il codice, in modo incrementale.
Se trovi durante la fase di refactoring che, per esempio, l'iniezione di dipendenza (DI) semplificherebbe il design, ottimo, usalo. Ma non iniziare con DI o qualsiasi altra tattica / tecnica come un martello preferenziale. Lascia che il codice sia la tua guida e lascia che il design evolva in modo naturale, un test alla volta.