Uff largo para leer y masticar y menos ahora que ya tengo la cabeza medio quemada
En fin, la moraleja: Aprovechar y abusar de los eventos y tratar de que todo el procesamiento, calculo, o trabajo real pase dentro de los objetos que saben hacer ese proceso; los formularios y controles solamente sirven para pedir/mostrar datos, y disparar metodos de las clases: avisarles que empiecen, que paren y poco, poco mas
A la larga (no miuy lejana, en realidad) termina dando muchisimo redito a lo(s) desarrolladores
Asi es como debiera ser... en la práctica es otra cosa. ¡Cuántas veces nos vemos obligados a hacer unas mezclas que nos afecta la cohesión! Hay que recordar que la cohesión y el acoplamiento son necesarios, e inevitables. Van de la mano.
Estos tipos de relación entre interfaz-lógica/procesal se hace más complicado cuando ya no se trata de un diseño tradicional que sugiere 3 capas: lógico, interfaz, datos. En cuanto ya se vuelve de interés tener las capas de aplicación, presentación, dominio ya se hace más lioso el trabajo.
Y si, el perfil del diseñador es fundamental tenerlo. Ayuda mucho.
Y como dije, hay cosas inevitables. Por ejemplo hace unas semanas que estuve dando batalla a un diseño que me comía la cabeza... necesitaba ahorrarme código hasta cuadruplicado (salvo algunos detalles entre ellos), pero también un par de evaluaciones. Si me centraba en el ahorro de esos codigos repetibles, generaba evaluaciones innecesarias en otros lados... Y si centraba las evaluaciones, me condicionaba a estar repitiendo parte del código que se dedicada a tareas de procesamiento. Si sumaba todas las evaluaciones llegaba a una V(G) de 6 a 7. Y 7 es considerado el número mágico en el que uno debe prender la lamparita y revisar lo que tiene.
Y si considero que incluso el rediseño era necesario para evitar mover grandes estructuras de datos entre diferentes métodos para no provocar un error de memoria... puff. No hay cabeza que aguante. Te consume.
Esto nos lleva a que uno debe hacer aceptar ciertos compromisos.
Sea el camino que elija en algo se pierde.
Hay batallas que no necesariamente nos lleve a una respuesta definitiva o clara. Y esa es una lección que debemos aprender. En informática existe el gris.
¡Madre de Dios!
Agustín, muchas gracias por tu tiempo. Parece que no era tan tonto lo que pretendía.
De todas maneras me temo que para mi nivel de programación tu código me supera. No soy informático, no he estudiado nunca programación y he aprendido a base de foros y lo que escribo en delphi y lazarus. Soy ingeniero que hace cosillas de bases de datos y poco más.
Parece que a Delphius le has dado ideas para trabajar así que tu tiempo en enseñarnos va a ser bien aprovechado.
Muchas gracias.
En realidad la idea es una refrescura de un concepto en el que venía trabajando.
Tenía un diseño más elaborado... y complejo. Una serie de observadores encadenados... Es decir que un observador era a su vez un sujeto y notificaba a alguien de más "arriba". Y se estaba yendo de la mano. Rediseñé mi trabajo, y parte del problema se eliminó pero aún no había dedicado a estudiar en como haría la comunicación entre interfaz y la parte "procesal" adaptada al nuevo esquema.
En mi nuevo esquema procesal hay varios objetos interviniendo, operando, y hay info de interés que viene bien estar dando aviso de como va el trabajo. Justamente es lo que me estaba maquinando la cabeza hasta que vi la propuesta de Agustín con sus eventos OnBefore, OnProcess y OnFinish y la lamparita prendió.
No te sientas mal por si sientes que esto te supera. No temas. Las propuestas de Agustín como la mía es aprovechar el concepto de eventos. Tienen un potencial enorme. En resumen, e independientemente de la complejidad de nuestros diseños, todo se resume en dotar a las clases de interés de un mecanismo de publicación de avances o cambios que otros estén interesados.
Entonces tenemos una clase que hace algo, y otra que quiere ser avisada de eso. Entonces ambas deciden compartir un "protocolo de comunicación", para eso son los eventos. La clase que se dedica a "procesar" define el cuerpo (las estructuras) de los eventos que considera necesario para compartir los cambios y avisos. La clase que "escucha" los cambios va a implementar los métodos de respuesta para dichos eventos.
Eso es lo que propone el patrón Observador, únicamente que lo abstrae más. En lugar de asumir una relación 1-1, propone que sean varios los interesados en ser notificados. La clase Sujeto (la que procesa y notifica) registra en una lista a los observadores. Luego simplemente recorre la lista y les envía el mensaje de que algo ha cambiado/sucedido y les pasa por parámetro el dato que necesitan. Ya cada observador implementará el algoritmo adecuado para dar respuesta al aviso.
En el ejemplo de Agustín puedes ver el caso 1-1. Tiene una clase que define 3 eventos (uno para antes de empezar, en proceso y otra para cuando finaliza) y es la que centra el trabajo. Luego está el observador que es el form. En el form implemeta los algoritmos de respuesta para los 3 eventos.
Saludos,