Foros del Web » Programación para mayores de 30 ;) » Programación General »

Patrones

Estas en el tema de Patrones en el foro de Programación General en Foros del Web. Buenas ¿Alguien sabe donde puedo encontrar información a cerca de como hacer los patrones GASP? O bien si alguien podría hacer 3 patrones simples si ...
  #1 (permalink)  
Antiguo 06/09/2008, 16:25
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
De acuerdo Patrones

Buenas

¿Alguien sabe donde puedo encontrar información a cerca de como hacer los patrones GASP?

O bien si alguien podría hacer 3 patrones simples si le doy un diagrama de clases...

Saludos.
  #2 (permalink)  
Antiguo 08/09/2008, 07:29
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años
Puntos: 2
Respuesta: Patrones

Google? No se a que te refieres con patrones GASP... Si quieres decir patrones de diseño orientado a objetos puedo darte una mano...
__________________
Saludoss
Guille
  #3 (permalink)  
Antiguo 08/09/2008, 12:44
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: Patrones

Cita:
Iniciado por guille_el3 Ver Mensaje
Google? No se a que te refieres con patrones GASP... Si quieres decir patrones de diseño orientado a objetos puedo darte una mano...
Me refiero a eso mismo, orientados a objetos, me comí una letra de todos modos, son GRASP.

Te envío un privado.
  #4 (permalink)  
Antiguo 16/09/2008, 21:07
 
Fecha de Ingreso: septiembre-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Patrones

Hola que tal, mirando por arriba los temas propuestos para debatir este el el que mas se encaja a mi pregunta que hace mas de un par de semanas me esta dando vueltas por la cabeza y no logro conseguir responderla de forma que me convenza.
Bueno mi pregunta es la siguiente:
Yo estoy desarrollando u sistema tratando de diseñarlo siguiendo las tantas buenas practicas recomendadas, es decir aplicando el patron capas para encapsular la funcionalidad relacionada, asu vez aplicando cada patron grasp (bajo acoplamiento, alta cohesion, experto, etc) y a su vez varios patrones gof. La cosa es que la capa de negocio quedo aplicando esto muy bien, por otro lado la capa de presentacion tambien y a su vez la de aplicacion tambien, pero al momento de tomar la desicion de cual es la mejor forma que conectar la capa de presentacion con la de aplicacion o negocio se me vino una lluvia dudas.
Por ejemplo:
Tengo un formulario que al iniciarce recibe como parametro un objeto por ejemplo el controladorSocio que se encarga de la gestion de socios, el formulario conociendo este bojeto puede enviarle mensajes y a su ves este se encarga de comunicarse con las clases de negocio o sea que la funcion del controlador es la de hacer de intermediario entre la capa de presentacion y la de negocio. Mi problema esta en que no se como devolverle los datos al formulario o cualquier otro objeto que resida en la capa de presentacion. Por ej. de que quiera identificar un socio:
Le devuelvo un objeto cliente? Pero si el objeto de la capa de presentacion no reconoce que es un objeto?

Le devuelvo un string con los datos distinguidos por algun separador defindo?? (por ejemplo un strin con formato xml para que cada objeto de la presentacion pueda entenderlo sea quien fuere?

Lo que quiero lograr es independizar la capa de negocio y la de presentacion.
  #5 (permalink)  
Antiguo 16/09/2008, 21:24
 
Fecha de Ingreso: septiembre-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Patrones

Espero que mi pregunta no sea demasiado confusa...
Para aclararla u poco mas yo quisiera saber lo siguiente.

Dentro del click del boton identificar cliente tengo este codigo
respuesta = thisform.oControladorSocio.identificarSocio(idSoci o)
La respuesta puede ser tanto un mensaje diciendo que el cliente no se encontro, o en caso contrario se devolveria el cliente
lo que yo estoy tratando de saber es si lo mejor es con que formato devuelvo esa informacion o como. Por ejemplo utilizo el patron observador cuando quiero avisarles a cada objeto oyente cuando ocurre algo sobre una propiedad y éste objeto oyente hace lo que tiene que hacer dependiendo quien sea.
Como puedo hacer para que "respuesta" (del ejemplo anterior) no dependenda de quien ejecuta el metodo. Quiero que sea quien fuere el que reciba la respuesta del mensaje la entienda, siendo éste un formulario de VFP o C# o java o hasta una pagina u hoja de calculo.

Perdon por no ser demasiado claro, pero no se como hacer para que se entienda cual es mi idea....
Muchas Gracias
  #6 (permalink)  
Antiguo 16/09/2008, 21:41
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años
Puntos: 2
Respuesta: Patrones

Me parece que te estas tomando las cosas con demasiada rigidez.

O sea, para mi, independizar la capa de negocio de la de presentacion esta bien, pues un objeto de negocio puede funcionar sin eso. Pero en la capa de presentación, lo que tienes que hacer es mostrar información de negocio, ¡Que tienen tus objetos de negocio!
Obviamente lo que digo, lo digo sin saber que arquitectura estas pensando (si es cliente servidor, con cliente pesado o cliente web, o no...).

En sí, como bien dijiste, son buenas prácticas el bajo acoplamiento, la alta cohesión. Pero el acoplamiento nulo no existe. Porque sino tus objetos no se hablarían entre si. Bueno, esas mismas practicas puedes aplicarlas a las capas. Capas cohesivas, con bajo acoplamiento entre sí. Bajo, no nulo.

Si haces todo un mundo hermoso de objetos, ¿Porque romperlo devolviendo un gran string asqueroso? :S.

O sea, lo que yo te recomiendo es que en la presentación uses objetos de negocio, u oootros objetos que no sean los de negocio, pero contengan la informacion de ellos (puaj, no queria decir eso :( ).

Bleh, objetos contenedores de datos no me gustan, porque si no tienen comportamiento no son objetos lindos... Quizás soy muy purista, pero los no puristas son muy estrictos con la distribución de las capas y son mas infelices :P.
__________________
Saludoss
Guille
  #7 (permalink)  
Antiguo 17/09/2008, 06:56
 
Fecha de Ingreso: septiembre-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Patrones

Gracias guillle, voy a tomar en cuenta tu respuesta para seguir avanzando en esto. Tenes mucha razon de lo que decis....
  #8 (permalink)  
Antiguo 17/09/2008, 12:57
 
Fecha de Ingreso: septiembre-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Patrones

Guille tengo otra duda...
Que tendria que devolver un metodo que dependiendo de su logica interna responde de manera diferente?
Por ejemplo supongamos el metodo:

identificarCliente(idCliente)

Devuelve un oCliente si hay un cliente con ese idCliente
Devuelve el mensaje "El cliente no esta registrado" si no hay ningun cliente con ese idCliente
Devuelve el mensaje "En este momento no se pueden consultar los cliente" si la base de datos esta bloqueada.
Que valor debería devolver este método??
Siempre devuelve un oCliente si esta todo bien y null en caso contrario??
Pero como le comunico al objeto que invocó el método que mensaje mostrar en caso de que el cliente devuelto sea null??
En el método paso también una referencia a él para que el receptor del mensaje le envie un mensaje a través de un método?? No acoplaría demasiado a los objetos??
  #9 (permalink)  
Antiguo 17/09/2008, 14:00
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años
Puntos: 2
Respuesta: Patrones

No se si php tiene excepciones (creo que estas utilizando php por la sintaxis que utilizaste antes).

Pero en los casos de error esta bueno utilizar excepciones a veces. Entonces tu metodo siempre retorna un cliente, y si no puede tira un error (que mas arriba capturarás y tratarás. O no)
__________________
Saludoss
Guille
  #10 (permalink)  
Antiguo 17/09/2008, 15:38
 
Fecha de Ingreso: septiembre-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Patrones

Estoy usando visual foxpro 9.0 (y java). Sí tiene excepciones pero no las quiero manejar en el objeto de la capa de presentación para que no tenga responsabilidad alguna en el dominio de la aplicación, es por esto que tengo clases controladoras que se encargan de llevar a cabo los controles sobre objetos del dominio, y es ésta clase la que se encarga de que se respeten las reglas de negocio y en caso contrario de avisar qué regla no se ha validado (por ej. "El cliente no esta registrado").
Pero según tu respuesta, me estas aconsejando que la clase controladora se encargue de publicar a todos los objetos oyentes (mas bien él objeto) que se ha producido una excepción dentro del dominio y que éstos objetos se encargue de tratarlas según corresponda.

En resumen tendría que aplicar el patrón observador para tratar las excepciones que se puedan producir, entonces si se produce una excepción en la clase controladora:
Invoco al método

this.publicarExcepcion(nombre, valor)

Este método se encargaría de avisarle a sus oyentes (en este caso un formulario) de que se ha producido una excepción:

this.oyente.ocurrioExcepcion(nombre,valor) (puede que haya mas de un oyente)

Entonces el oyente al recibir este mensaje hace:
do case
case nombre == "Cliente invalido"
mostrarMensajeInformacion(valor)
case nombre == "Base Datos Bloqueada"
mostrarMensajeError(valor)
endcase

De esta manera capturaría la excepción producida y a su vez el método identificarCliente(idCliente) retornaría null.

Guille muchas gracias por tus respuestas..., espero no estar abusando de tu generosidad.
  #11 (permalink)  
Antiguo 17/09/2008, 19:50
 
Fecha de Ingreso: septiembre-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Patrones

Es eso lo que me quisiste decir?? (adaptado obviamente a mi contexto)
  #12 (permalink)  
Antiguo 17/09/2008, 20:48
 
Fecha de Ingreso: abril-2008
Mensajes: 264
Antigüedad: 16 años
Puntos: 2
Mensaje Respuesta: Patrones

Mmmm no estaba pensando en un observer cuando te hablé de excepciones, porque en principio se manejan de manera distinta...
Yo apuntaba a algo así:

Un objeto de negocio que supongamos es algo así (escribo en java):

Código:
public class Cliente{

public void bailar(int unTiempo){
  if (unTiempo < 0) 
     throw new BaileException("el cliente no puede bailar un tiempo negativo");
}

}
Y en la presentación, o controller o como quieras decirle, no me interesa el nombre :P, digamos algo como:

Código:
...
public bailarButton_click(){

  try{
    unCliente.bailar(lblUnaCantidad.getValue());
  }catch(BailarException e){
    lblError.setValue(e.getMessage());
  }

}
...
O sea, tiro la excepcion en la capa de negocio, y en el controller la capturo y la trato (mas que tratarla estoy mostrandole el error al usuario, que es lo conveniente, para que el usuario se de cuenta de que no esta haciendo las cosas del todo bien).
__________________
Saludoss
Guille
  #13 (permalink)  
Antiguo 18/09/2008, 17:08
 
Fecha de Ingreso: septiembre-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Patrones

Gracias...
  #14 (permalink)  
Antiguo 14/05/2009, 08:20
 
Fecha de Ingreso: septiembre-2008
Mensajes: 8
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Patrones

Hola, quisiera saber si existe algun patron que me guie con respecto a las modificaciones de objetos. Me gustaria saber cual es la mejor solucion para la gestion de cambios de por ejemplo un objeto cliente.
Por ejemplo: Yo tengo un cliente que se identifica por su mail el cual una ves registrado no puede cambiar, luego al pasar el tiempo este cliente puede cambiar sus datos, pero obviamente debo tener un control de versiones para que pedidos anteriores (que contienen una version anterior del cliente) no se vean afectados por los cambios.
Que me aconsejan hacer para tratar esto??
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 20:24.