Ho un servizio di applicazione che restituisce l'entità con il suo numero di registrazione
public Entity FindByRegNumber(string number)
{
if (!RegNumber.IsValid(number))
{
return null;
}
var regNumber = new RegNumber(regNumber);
return repository.FindBy(regNumber);
}
Qui RegNumber
è un oggetto valore e ha il metodo statico IsValid
che verifica che la stringa rappresenti correttamente il numero di registrazione. Questo metodo viene utilizzato anche all'interno del costruttore, ma, se la stringa non è valida, il costruttore genera InvalidOperationException
.
Se il metodo IsValid
apparteneva a qualche dipendenza iniettata, potevo semplicemente verificare nel mio test che fosse stato chiamato IsValid
(un tipo di test della casella bianca). Ora devo testare FindByRegNumber
ripetendo tutto l'input usato per testare il metodo IsValid
(test black box).
Sembra che l'unico motivo per sbarazzarsi del metodo statico è rendere i test più facili. Non diminuisce nemmeno l'accoppiamento durante la chiamata a FullRegistrationNumber
di permanenze del costruttore.
Un altro approccio è introdurre una factory FullRegistrationNumberCreator' which could abstract away both validation and construction of
FullRegistrationNumber ', ma sembra un overkill e overengineering.
È qui una soluzione corretta?