Mi piace lavorare in lingue con tipi statici, perché mi piace usare i tipi come strumento per progettare un'API prima di iniziare a codificarlo.
Mi piace anche TDD, perché mi aiuta a concentrarmi sul lavoro a piccoli passi per assicurarmi di ottenere risultati coerenti.
Ma quando combino i due approcci, ho spesso questo problema: progetto il tipo di API, ma prima di scrivere test unitari per parte della funzionalità, trovo che devo implementarlo perché altrimenti il compilatore si lamenta dei metodi essere digitato in modo errato. Ad esempio, in un progetto Java, ho la seguente classe:
public class TransformedModelObserver<O,S>
{
private O sourceModel;
private Function<O,S> transform;
// note: a ChangeNotification<S> is a class that can only be constructed with a non-null instance of S
private Consumer<ChangeNotification<S>> receiver;
// ....
/** Should call the receiver if and only if the source model change
* is visible in the transformed model.
*/
public void notifySourceModelChanged ()
{
}
}
Posso semplificare il test usando una funzione di identità per la trasformazione, che consentirebbe un primo passo facile, ma il compilatore si lamenta se non lo chiamo comunque. Quindi, come potrei lavorare per implementare questo metodo in piccoli passi guidati da test in questo scenario?