Devi sottrarre le chiamate a time()
come dovresti estrapolare le chiamate a rand()
e il suo elenco. La ragione per farlo è che funzioni come quella sono forme di stato globale non deterministico. Lo stato globale non deterministico rende i test molto più difficili perché non è possibile isolare i test e testare tutte le condizioni contemporaneamente. Immagina se dovessi aspettare fino a dopo mezzogiorno per vedere se il mio codice dicesse "Buonasera" invece di "Buongiorno" o "Buonasera"!
Se vedi che la tua interfaccia sta iniziando a permeare la tua applicazione, questa potrebbe non essere una brutta cosa. Se mai, ti sta dicendo quanto stai usando queste funzioni integrate. Puoi dipendere da te per mantenere il tuo codice e le tue interfacce all'interno della tua base di codice, quindi non dovresti avere tutte le preoccupazioni su un'interfaccia in movimento che causa un intervento chirurgico con fucile a pompa. Estrarre via time()
dovrebbe essere un'interfaccia abbastanza stabile e probabilmente non dovrebbe vedere alcuna modifica per la maggior parte.
L'alternativa a un'interfaccia è semplicemente iniettare il risultato di una chiamata su time()
piuttosto che chiamarlo nel metodo. Quindi scrivi getGreeting(time());
invece di scrivere getGreeting($timeUtil);
(che nel metodo fa $time = $timeUtil->getTime()
). Questo aderisce più strettamente alla Legge di Demetra poiché non stai raggiungendo una cosa attraverso un'altra, ma significa anche che il tempo che vuoi deve essere il momento in cui viene invocato il metodo.
Un'alternativa alternativa è quella di passare a un riferimento di funzione piuttosto che generare un'interfaccia separata. In PHP, puoi fare qualcosa di simile:
function getTime($timeFunc) {
return call_user_func($timeFunc);
}
echo getTime('time')."\n"; # Call the built-in time function
echo getTime(function() { # Call a custom function
return 1;
})."\n";
Questo ha un sovraccarico minore dell'interfaccia in piena regola pur consentendo alla funzione di essere chiamata pigramente e consentendo l'iniezione di dipendenza.