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