Noo, no sonaste enojado Che...

Dame un rato y trato de hacerme un huequito pa ver el tema de los nombres.
( muchas veces me pasa que se convierte, eso de bautizar las clases, en una
tarea mas compleja que la de diseñarlas.... :((, me imagino que no soy el
unico que tiene ese problema..  )

Daniel

El día 1/11/07, Carlos Peix <[EMAIL PROTECTED]> escribió:
>
>  No, no me enojo :-), pero tenia que aclararlo. Elegi cuidadosamente las
> frases para no sonar enojado, pero no lo logre :-).
>
> Incluso estoy pensando algun cambio en los nombres para que el ejemplo no
> despierte dudas en el sentido que vos mencionas.
>
> Alguna sugerencia para cambiar los nombres de las clases y que sea un buen
> ejemplo de uso de los patrones y que al mismo tiempo no haga ruido desde el
> punod de vista de la distribucion de responsabilidades?
> Carlos Peix
>
>  ------------------------------
> *From:* patrones@mug.org.ar [mailto:[EMAIL PROTECTED] *On Behalf Of *Daniel
> Calvin
> *Sent:* Jueves, 01 de Noviembre de 2007 10:41 a.m.
> *To:* patrones List Member
> *Subject:* [patrones] Factory Pattern aplicado al la logica de negocio
>
> Carlos
>
> No te me vayas a enojar!!!!, por favor. :))
>
> Te juro que no era mi intención discutir ni criticar, solo remarque la
> cuestión para que si alguien toma la solución le de una vuelta de tuerca al
> diseño.
>
> Digamos que aproveche para hacer incapie en el donde o el que uno deberia
> mirar para poner estas cosas.
>
> Por eso al principio puse "critica constructiva".
>
> Mas que gracias por leerlo, gracias por escribirlo. :))
>
> Te mando un abrazo.
>
> Daniel
>
>
>
>
>
>
> El día 1/11/07, Carlos Peix <[EMAIL PROTECTED]> escribió:
> >
> >  Hola Daniel,
> >
> > Este es el riesgo de escribir codigo para contestar en una lista :-).
> > Terminamos discutiendo el modelo que yo propuse como ejemplo en lugar de
> > discutir el problema original.
> >
> > No conozco el dominio de Leandro, los conceptos TipoCliente,
> > CalculadorImpuestos, etc., los elegi yo con el unico fin de mostrar como
> > aplicar la combinacion State/Strategy.
> >
> > Ese codigo no pretende decirle a Leandro como resolver su dominio sino
> > ejemplificar la aplicacion de los patrones en cuestion. Yo entendi del
> > ultimo post de Leandro que tenia dudas sobre la implementacion de estos
> > patrones.
> >
> > Visto como vos lo ves, tenes razon, conceptualmente no es adecuado el
> > modelo.
> >
> > Gracias por tomarte el tiempo de leerlo.
> >
> > Carlos Peix
> >
> >  ------------------------------
> > *From:* patrones@mug.org.ar [mailto:[EMAIL PROTECTED] *On Behalf Of *Daniel
> > Calvin
> > *Sent:* Jueves, 01 de Noviembre de 2007 10:01 a.m.
> > *To:* patrones List Member
> > *Subject:* [patrones] Factory Pattern aplicado al la logica de negocio
> >
> > Hola Carlos
> >
> > Estuve mirando el ejemplito en el BLog.
> > Puedo hacer una critica constructiva?
> >
> > En Cliente definis una propiedad del type TipoCliente
> >
> > // La clase Cliente
> > public class Cliente {
> >
> >    ...
> >    // Este metodo delega en el metodo del tipo de cliente
> >    public ICalculadorImpuesto ObtenerCalculadorImpuesto() {
> >       return tipoCliente.ObtenerCalculadorImpuesto( this );
> >    }
> >    ...
> > }
> >
> >
> > Me da la sensación que cliente no es el experto en información para,
> > aunque sea mediante otro artefacto ( TipoCliente ), obtener el calculador.
> >
> > En el dominio esa responsabilidad es seguramente de algun agente externo
> > a cliente.
> >
> > Me refiero a que en ese contexto se le esta asignando a Cliente, aunque
> > sea indirectamente, una responsabilidad que lo excede.
> >
> > Debería, a mi entender, existir un tercer artefacto, parecido o tu
> > sugerencia de TipoCliente ( no lo llamaria de esa forma porque eso sugiere
> > que esta muy pegado a Cliente), pero que sería el encargado de proveer en
> > base a Cliente el o los Calculadores.
> >
> > La diferencia puede ser sutil pero no lo es, Cliente en el ejemplo pasa
> > a ser muy rigida y acoplada, se adapta facil al cambio del calculador de
> > impuestos pero lleva mucho equipaje en la mochila.
> >
> > El tema es discutible, pero me parece que sería mucho mas sano que eso
> > fuera externo a Cliente.
> >
> > Si estuvieramos hablando de la categoría de IVA de Cliente mi enfoque
> > seria distinto, ya que depende pura y exclusivamente del cliente, es una
> > atributo muy concreto.
> >
> > Si estamos hablando de otro tipo de impuestos o cualquier otra cuestion
> > que se calcula en base a otros atributos, por ejemplo la categoría de IVA y
> > alguna otra cosa, o el tipo de documento y la nacionalidad, osea cuestiones
> > que exceden un propiedad concreta, algo que debe ser inferido, esa
> > funcionalidad, esa responsabilidad, debe ser externa a Cliente.
> >
> > Bueno hago el comentario porque me parece que aplica a como resolver el
> > problema en general. No lo tomes como una crítica al ejemplo que propusiste.
> >
> > Creo que extraer esa responsabilidad de Cliente y buscar el responsable
> > real mejora el diseño y la claridad de la aplicación, al mismo tiempo
> > Cliente será mas Cohesivo y menos acoplado.
> >
> > Saludos
> >
> > Daniel Calvin
> >
> >
> > El día 1/11/07, Carlos Peix <[EMAIL PROTECTED]> escribió:
> > >
> > >  Hola Leandro, como el post se me hizo largo, lo coloque en el blog.
> > >
> > > http://carlospeix.blogspot.com/2007/11/refactoring-statestrategy.html
> > >
> > > Carlos Peix
> > >
> > >  ------------------------------
> > > *From:* patrones@mug.org.ar [mailto:[EMAIL PROTECTED] *On Behalf Of
> > > *Leandro Tuttini
> > > *Sent:* Miércoles, 31 de Octubre de 2007 05:39 p.m.
> > > *To:* patrones List Member
> > > *Subject:* [patrones] Factory Pattern aplicado al la logica de negocio
> > >
> > >
> > > Daniel, Carlos, mil gracias por los comentarios, van aclarando un poco
> > > el tema.
> > >
> > > Daniel sino por lo que veo tus comentarios apuntan a no agregar
> > > funcionalida o acoplar, el Factory a un repositorio.
> > > O sea me aconsejas que la implementacion de Factory reciba la info que
> > > necesita y que no los obtenga por si mismo.
> > >
> > > Como yo lo habia pensado el Factory seria el experto en la creacion
> > > del impuesto, como bien dice Daniel.
> > >
> > > Carlos, te comento la verdad se que estoy un poco flojo en temas de
> > > patrones, la verdad no sabria como cerrarlo con el State, aunque me 
> > > dejaste
> > > la duda con el Strategy.
> > >
> > > Por lo que vi del Strategy en este es como que yo decido que
> > > estrategia aplicar en cada momento, sino entendi mal esta no se descubre 
> > > en
> > > runtime.
> > >
> > > O sea al Strategy le digo aca esta mi contexto con esta info cargada,
> > > aca tenes la estrategia a aplicar, ahora ejecutate.
> > > La cuestion es que en este caso no se en tiempo de desarrollo que
> > > estrategia aplicar, salvo que codifique la logica para descubrirla, pero 
> > > en
> > > ese caso estoy perdiendo encapsulamiento, ya que debo repetir esta logica
> > > cada vez que quiera saber que impuesto aplicar.
> > >
> > > Lo que deberia lograr es poder en runtime que impuesto aplicar a la
> > > transaccion, o sea que concreto de impuesto se debe aplicar.
> > > Y la macana es que no sale esta logica solo de un archivo de
> > > configuracion, como puedo ver en varios ejemplos.
> > >
> > > Muchas gracias
> > > Saludos
> > >
> > >
> > >
> > > *Daniel Calvin <[EMAIL PROTECTED]>* escribió:
> > >
> > > Hola Leandro
> > >
> > > La verdad no me cierra mucho, ni abstract factory, ni factory method,
> > > si bien entre los dos el que mas me suena para lo que queres hacer 
> > > abstract
> > > factory. ( sobre todo porque genera una familia de artefactos )
> > > Por ejemplo en cooperator para generar el código, ya que puede ser que
> > > tenga que generar tanto vb.net como c# y ademas parsear los scripts y
> > > el estilo de tagueado de los scripts  puede cambiarse, por ahora solo 
> > > usamos
> > > <% %>, pero puede ser cualquiera, el interprete y el parser se crean con 
> > > una
> > > abstract factory.
> > >
> > > Para saber que pasarle como parametro yo le daria un giro a la cosa,
> > > en vez de pensar en que le psao, pensaria en que necesita.
> > >
> > > Ese artefacto en definitiva será el experto en información para el
> > > calculo de impuesto o, esa sería otra opcion, el experto en información 
> > > para
> > > la creación de los calculadores de impuestos.
> > > La primera me gusta más.
> > > Ahora..., que necesita ese experto para disfrazarse de calculador de
> > > impuestos o de factory de esos calculadores.
> > > Yo trataría de pasarle algun o algunos objetos del dominio que sean
> > > representativos para ese experto, en todo caso aplicar segregación de
> > > interface para no acoplar mucho la cosa.
> > >
> > > Bue, tal vez me fui por las ramas.., el que mas aplica es abstract
> > > factory, pero me suena medio forzado.
> > >
> > > Saludos
> > >
> > > Daniel Calvin
> > >
> > >
> > >
> > >
> > >
> > > El día 31/10/07, Leandro Tuttini < [EMAIL PROTECTED]>
> > > escribió:
> > > >
> > > >
> > > > Hola Carlos que tal.
> > > >
> > > > Paso a explicar con un poco mas en detalle.
> > > >
> > > > Tengo una transaccion bancaria a la que se le aplicaran impuestos,
> > > > la cuestion es que la decision de que impuestos aplicar varia en base a 
> > > > info
> > > > del cliente y su estado de cuentas, en realidad no se muy bien aun cual 
> > > > sera
> > > > la logica aplicada para determinar que impuestos especifico aplicar, 
> > > > pero si
> > > > se que del resultado de eso devolvera el concreto del impuesto.
> > > > Por ejemplo si seran impuestos nacionalales, internacionales, etc,
> > > > cada impuesto por supuesto tiene la logica de como se calcula.
> > > >
> > > > La cuestion es que este Factory deberia tal vez recibir un cliente y
> > > > ademas consultar al repositorio el resto de la info en base a este.
> > > >
> > > > Justamente lo que no se es si es correcto que el Factory este atado
> > > > a un objeto como parametro y ademas a la consulta a la db.
> > > >
> > > > O si implementarlo pasandole como parametro toda la info que
> > > > necesite (tal vez con un objeto Context), y que solo aplique logica para
> > > > resolver que devolver, sin consultar a nada externo.
> > > >
> > > > Espero se entienda un poco mas, sino paso mas detalles.
> > > > Saludos
> > > >
> > > > *Carlos Peix < [EMAIL PROTECTED]>* escribió:
> > > >
> > > > Hola Lenadro,
> > > >
> > > > Podes describir un poco el caso real? es posible que el patron State
> > > > sea mas adecuado pero para saberlo seria bueno disponer de mas 
> > > > informacion.
> > > >
> > > > Carlos Peix
> > > >
> > > >  ------------------------------
> > > > *From:* patrones@mug.org.ar [mailto: [EMAIL PROTECTED] *On Behalf
> > > > Of *Leandro Tuttini
> > > > *Sent:* Miércoles, 31 de Octubre de 2007 10:19 a.m.
> > > > *To:* patrones List Member
> > > > *Subject:* [patrones] Factory Pattern aplicado al la logica de
> > > > negocio
> > > >
> > > >
> > > > Hola, que tal.
> > > >
> > > > Queria plantear una duda conceptual que por supuesto repercutira en
> > > > la implementacion.
> > > >
> > > > La duda esta referida al patron Abstract Factory, aunque creo que el
> > > > Factory Method tambien estaria incluido.
> > > >
> > > > En todos los papers y notas que pude ver este patron sera el
> > > > encargado de decidir que concreto devolver en base al contexto.
> > > >
> > > > Ahora bien resulta que casi siempre es aplicado en la construccion
> > > > de objetos de infraestructura como ser ventanas, botones, por ahi 
> > > > basados en
> > > > el ambiente donde se ejecuta, y este resuelve en base a la lectura de un
> > > > archivo de configuracion.
> > > >
> > > > Ahora bien que sucede si se quiere aplicacar este patron a reglas de
> > > > negocio, pero que dedida en base a informacion de una transaccion, (por
> > > > ejemplo, info del cliente), en este caso la configuracion no serviria.
> > > >
> > > > Este tipo de caso como se implementaria, o sea se deberia crear un
> > > > objeto Context que se info especifica y se lo pasaria al constructor del
> > > > Factory, o se puede leer desde la base de datos, caso que el cliente, 
> > > > por
> > > > ejemplo, no alcance para resolver que objeto concreto crear.
> > > >
> > > > Es correcto que la implementacion del factory este atado a la
> > > > lectura de un repositorio?
> > > > En realidad no al concreto del repositorio, pero si a su interfaz.
> > > >
> > > > Bueno seria esta simplemente la duda, como utilizar el patron de
> > > > creacion cuando se trata de aplicarlo a objetos de negocio.
> > > >
> > > > Saludos
> > > >
> > > >  ------------------------------
> > > >
> > > > Los referentes más importantes en compra/venta de autos se juntaron:
> > > > Demotores y Yahoo!. Ahora comprar o vender tu auto es más fácil.
> > > > Visitá http://ar.autos.yahoo.com/
> > > >
> > > >
> > > >  ------------------------------
> > > >
> > > > Los referentes más importantes en compra/venta de autos se juntaron:
> > > > Demotores y Yahoo!. Ahora comprar o vender tu auto es más fácil.
> > > > Visitá http://ar.autos.yahoo.com/
> > > >
> > >
> > >
> > >
> > > --
> > > Daniel A. Calvin
> > > Cooperator Team Member
> > > http://www.cooperator.com.ar
> > > Microsoft Certified Professional
> > >
> > >
> > >  ------------------------------
> > >
> > > Yahoo! Noticias
> > > Todo lo que tenés que saber sobre Elecciones Presidenciales 2007
> > > encontralo en Yahoo! Noticias.
> > > http://ar.news.yahoo.com/elecciones2007/
> > >
> > >
> >
> >
> > --
> > Daniel A. Calvin
> > Cooperator Team Member
> > http://www.cooperator.com.ar
> > Microsoft Certified Professional
> >
> >
>
>
> --
> Daniel A. Calvin
> Cooperator Team Member
> http://www.cooperator.com.ar
> Microsoft Certified Professional
>
>


-- 
Daniel A. Calvin
Cooperator Team Member
http://www.cooperator.com.ar
Microsoft Certified Professional

Responder a