Propuesta "clean code" a legacy code ( 1 )

15 views
Skip to first unread message

Jonathan Vila López

unread,
Oct 11, 2013, 11:41:01 AM10/11/13
to barcel...@googlegroups.com
Hola.

Tengo un codigo legacy que me gustaria mejorar...... que propuestas "clean code" teneis ?

Antecedentes :
   * Tenemos un obeto rate que tiene 2 objetos Base y Total.
   * Si ese objeto contiene valor en Base , obtendremos la informacion de aqui
   * Si Base esta null la obtendremos de Total
   * Tanto uno como el otro tenemos 2 atributos AmountBeforeTax y AmountAfterTax
   * En caso de que el AmountBeforeTax tenga valor, lo obtendremos sino lo cogeremos del AmountAfterTax
   * Si obtenemos el valor de Total debemos dividir el valor por el numdias
   * El valor obtenido se lo asignamos a dia.getPrecio() en el atributo que toque ( segun del que hayamos obtenido el valor )

                Double precio ;
               
// si nos pasan el nodo BASE
               
if (rate.getBase() != null) {
                 
if (rate.getBase().getAmountBeforeTax() != null) {
                    precio
= rate.getBase().getAmountBeforeTax().doubleValue();
                    dia
.getPrecio().setAmountWithoutTax(precio);
                 
} else {
                    precio
= rate.getBase().getAmountAfterTax().doubleValue();
                    dia
.getPrecio().setAmountWithTax(precio);
                 
}
               
} else {
                 
long numdias = DateRange.dateDiff(effectivedate.getTime(), expiredate.getTime());
                 
// si nos pasan el nodo TOTAL
                 
if (rate.getTotal().getAmountBeforeTax() != null) {
                    precio
= rate.getTotal().getAmountBeforeTax().doubleValue();
                    precio
= precio / numdias;
                    dia
.getPrecio().setAmountWithoutTax(precio);
                 
} else {
                    precio
= rate.getTotal().getAmountAfterTax().doubleValue();
                    precio
= precio / numdias;
                    dia
.getPrecio().setAmountWithTax(precio);
                 
}
               
}



Que opciones le veis ? como lo mejorariais ?

Saludos.

Jordi Fernandez

unread,
Oct 11, 2013, 12:14:57 PM10/11/13
to barcel...@googlegroups.com
Quizas algo asi:

// decide que estrategia aplicar, BASE o TOTAL. AmountCalculator es una interfaz, el objeto real sera AmountCalculatorBase o AmountCalculatorTotal
AmountCalculator ac = CalculatorStrategy.getCalculator(rate); 

// El metodo getPrice oculta la logica de calculo before o after tax.
price = ac.getPrice();

Asi se reduce la complejidad del codigo, es mas facil de testear y de comprender. Se pueden agregar mas algoritmos (mas objetos AmountCalculator) de un modo ordenado sin alterar la API que debe usarse.

Saludos,
Jordi.

2013/10/11 Jonathan Vila López <jonath...@gmail.com>

--
Has recibido este mensaje porque estás suscrito al grupo "Barcelona JUG" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a barcelona-ju...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.

Jonathan Vila Lopez

unread,
Oct 14, 2013, 5:57:33 AM10/14/13
to barcel...@googlegroups.com
Hola Jordi.... me gusta esta opcion que planteas :)


2013/10/11 Jordi Fernandez <jordi.fern...@gmail.com>
Reply all
Reply to author
Forward
0 new messages