Hola Leandro

Nos podes dar un poquitin mas de letra de tu caso, lo minimo como para
mejorar el nombre y los artefactos que intervienen en el ejemplo.

Gracias

Daniel Calvin

El día 1/11/07, Daniel Calvin <[EMAIL PROTECTED]> escribió:
>
> 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
>



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

Responder a