Ci sono cose che non si sradicano. Il concetto di semplicita’ ad esempio: molti vedono un if molto piu’ semplice di una chiamata polimorfica.
Oggi ho fatto la code review ad un collega: sostanzialmente dovevamo parsare un file che definiva delle operazioni aritmetiche basilari e poi eseguirle.
L’XML è qualcosa del tipo:
<add>
<function-literal value=’5′/>
<function-literal value=’6′/>
</add>
Le operazioni posso ovviamente essere annidate una nell’altra.
Ora, sara’ perche’ ho gia’ fatto qualcosa di vergognosamente simile sullo stesso parser, ma questo nella mia mente risuona in modo molto chiaro con qualcosa che i piu’ precisini posso chiamare composite (no!!! non sto forzando il pattern…..giuro che quando ho fatto l’altra parte ci sono arrivato un po’ alla volta, lo giuro!!)
Una volta che abbiamo un grafo di oggetti e dobbiamo valutare lo specifico nodo, bastera’ chiamare qualcosa tipo operazione.calculate(operandOne, operandTwo) ed il gioco e’ fatto, quell’amico chiamato polimorfismo ci risolve il problema!!
Il mio collega S. ha invece optato per una sempre classica soluzione procedurale (che non impegna mai, un po’ come il nero…)
Ha creato una generica ArithmeticExpression, ma con dentro una stringa che definisce l’operazione che viene di volta in volta inizializzata a “add”, “subtract” etc etc
Al momento di elaborare gli oggetti ottenuti dal parsing e fare la reale operazione, abbiamo del codice che si presenta all’incirca cosi’:
if (arithmeticExpression.getName().equals("add")) {
Calculator.add(operandOne, opernadTwo);
} else if (arithmeticExpression.getName().equals("subtract)) {
Calculator.subtract("operandOne, operandTwo);
etc etc
Quando gli ho fatto notare che questo mi sembrava inutilmente complesso, e non vedevo il perche’ chiedere l’identita’ della class per poi far fare a qualcun altro il lavoro (God Class is coming!!) mi ha detto che risultava + semplice che una gerarchia di classi ed una chiamata polimorfica.semplice ??? ora, stamattina ero di buon umore e non avevo voglia di far partire un flame sui principi di design, ma questo mi ha fatto rabbrividire…