refactorizacion

10 views
Skip to first unread message

miguel agustin cardamone

unread,
Oct 9, 2019, 8:09:43 AM10/9/19
to ClubSmalltalk
Hola

tengo estos dos metodos de clase 

priceBeforeTax
| com p p2 |
com := self isBestSeller
ifTrue: [ price / 50 ]
ifFalse: [ price / 100 ].
p := self isBestSeller
ifTrue: [ price * 1.1 ]
ifFalse: [ price ].
p2 := p + com.
^ p2

-----------------------------------------------------------

price
| com p p2 p3 |
self isBestSeller
ifTrue: [ p := price * 1.1.
com := price / 50 ]
ifFalse: [ p := price.
com := price / 100 ].
p2 := p + (p * 21 / 100).
p3 := p2 + com.
^ p3

como se ve hay codigo repetido quiero si pueden me ayuden a refactorizar estos dos metodos 

gracias 


Juan

unread,
Oct 9, 2019, 9:37:10 AM10/9/19
to clubsm...@googlegroups.com
Hola, unas observaciones,
Tenés pocos objetos pocas clases, si el producto fuera de la clase Bestm seller no habría solo delegacion.


--
--
To post to this group, send email to clubSm...@googlegroups.com
To unsubscribe from this group, send email to clubSmalltal...@googlegroups.com
 
http://www.clubSmalltalk.org
---
Has recibido este mensaje porque estás suscrito al grupo "ClubSmalltalk" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a clubsmalltal...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/clubsmalltalk/567e77cf-56c6-4e60-863f-0b0e137be044%40googlegroups.com.

Juan

unread,
Oct 9, 2019, 9:57:05 AM10/9/19
to clubsm...@googlegroups.com
No habría if ,

Carlos E. Ferro

unread,
Oct 11, 2019, 3:44:09 PM10/11/19
to ClubSmalltalk




-------- Forwarded Message --------
Subject: Re: [clubSmalltalk] refactorizacion
Date: Wed, 9 Oct 2019 09:43:31 -0300
From: Carlos E. Ferro <cefer...@gmail.com>
To: miguel agustin cardamone <macar...@gmail.com>


On 09/10/2019 09:09, miguel agustin cardamone wrote:
priceBeforeTax
| com p p2 |
com := self isBestSeller
ifTrue: [ price / 50 ]
ifFalse: [ price / 100 ].
p := self isBestSeller
ifTrue: [ price * 1.1 ]
ifFalse: [ price ].
p2 := p + com.
^ p2

Esto es equivalente a

priceBeforeTax
    ^self isBestSeller
                    ifTrue: [ price * 1.6 ]
                    ifFalse: [ price * 1.01 ]

y el otro, es

price
    ^self isBestSeller
                    ifTrue: [ price * ( 1.1 * 1.21 +  0.5 ) ]
                    ifFalse: [ price * 1.22  ]

Más que código repetido, es una forma de hacer las cuentas paso por paso, que si operas con un poco de álgebra se resuelve más corto.

Por supuesto, puede que me haya equivocado en alguna cuenta, lo hice rápido y de memoria, Pero un par de tests pueden despejar las dudas.

Ambos se pueden refactorizar, para dejar sólo el factor en dos me'todos, y multiplicar price por self factor o por self factorBeforeTax.

Saludos

--

carlos e. ferro | senior developer caesar systems

cefer...@gmail.com

Reply all
Reply to author
Forward
0 new messages