In Clean Code di Robert Martin, ho trovato il seguente metodo a p. 195:
private void parseSchemaElement(String element) throws ArgsException {
char elementId = element.charAt(0);
String elementTail = element.substring(1);
validateSchemaElementId(elementId);
if (elementTail.length() == 0) marshalers.put(elementId, new BooleanArgumentMarshaler());
else if (elementTail.equals("*")) marshalers.put(elementId, new StringArgumentMarshaler());
else if (elementTail.equals("#")) marshalers.put(elementId, new IntegerArgumentMarshaler());
else if (elementTail.equals("##")) marshalers.put(elementId, new DoubleArgumentMarshaler());
else if (elementTail.equals("[*]")) marshalers.put(elementId, new StringArrayArgumentMarshaler());
else throw new ArgsException(INVALID_ARGUMENT_FORMAT, elementId, elementTail);
}
Solo poche pagine prima (p. 157), il libro sostiene l'uso di dependency injection (DI) al fine di strutturare meglio il nostro programma e facilitare il test in isolamento.
L'esempio sopra dovrebbe essere il caso in cui l'iniezione di dipendenza dovrebbe essere usata per testare la classe data in isolamento , cioè senza testare tutte le classi *ArgumentMarshaller
?
Potremmo avere un oggetto factory, che creerebbe un *ArgumentMarshaller
appropriato dove necessario - questo sarebbe coerente con le raccomandazioni DI e anche facilitare il testing con mock / doubles.
.. o forse ho frainteso qualcosa e l'iniezione di dipendenza applicata qui non è una buona idea?