GLGDW 2006
Inicio

Viernes 21

Sab 22 Mañana

Sab 22 Tarde

Dom 23 Mañana

Dom 23 Tarde

Lunes 24

Galerías

 

... a Conferencias

 
Anuncios




 
© PortalFox

GLGDW 2006

Resumen del Sábado 22 de Abril - Mañana

PorAmby


El día amaneció con una ligera llovizna, la temperatura se mantuvo agradable y un ligero paseo matutino me ayudó a prepararme para la jornada intensiva que estaba por llegar.

Hoy vimos las Mejores prácticas en: control de errores, diseño de clases, diseño de interfaz de usuarios y trabajo con datos: locales y remotos ... prometía muchísimo y cubrió todas las expectativas.

Comenzó Rick Shumer con Mejores prácticas en el control de errores (Best Practices for Error Handling). El objetivo no era aprender a utilizar un método u otro para en control de errores, el objetivo es mostrar ideas de cómo implementarlo y sobre todo cómo hacer para recibir la cantidad de información necesaria y en la forma más evidente posible para poder corregir los errores.

Rick parte de la base de que hay que programar sobre la base de que vamos a tener errores y esos errores hay que tenerlos previstos, el usuario puede acometer acciones que provoquen errores y tengan como consecuencia que intentemos, por ejemplo usar una tabla sin tenerla abierta previamente, o intentar abrir un fichero inexistente, etc. Pues bien, Rick Shummer mostró una clase que tiene, cuyo objetivo no es tanto el control de errores como tal sino la información que el va a recibir de sus usuarios sobre los errores. La clase consta de un formulario con diferentes fichas donde se almacena la configuración real en la que se ha producido el error, de esta forma cuando el desarrollador recibe del usuario la comunicación sobre que se ha producido un error, es posible reproducir rápidamente las circunstancias en las que se produjo.

Entonces, algunas de las Mejores técnicas planteadas por Rick Shummer u otros expertos presentes como Nancy Folsom y Doug Hennig son:

  • implementar en lo posible tratamiento de errores de forma global, pasando todos los parámetros que sean necesarios, para recibir del error la información necesaria. Si se implementa a nivel de objeto, la gran ventaja es el evento Error que dispara VFP.
  • con la estructura TRY/CATCH, aprovechar el objeto exception para controlar en varios casos los posibles errores que pudieron ocurrir en el bloque TRY, por ejemplo:
    CATCH TO loException WHEN loException.ErrorNo = n
    donde n es el número concreto que se desea controlar
  • tener en cuenta el diseño de patrones, en este caso implementar la cadena de responsabilidad para que los errores sean controlados por quien corresponda
  • dejar que los usuarios tengan acceso y puedan leer el log de errores porque puede ofrecer información momentánea
  • aprovechar toda la estructura y los comandos que ofrece VFP (ERROR(), LIST MEMORY, LIST STATUS, CREATE VIEW) antes de crear complicados objetos con muchas propiedades. Este objeto será más un problema que una solución, por ejemplo en tratamiento de errores relacionados con escasez de memoria.
  • pedir al usuario un juego de datos en los que se produjo el error para poder reproducirlo de la forma más real posible
  • emplear lo más posible, además de la llamada telefónica y el correo, Internet para la transmisión de archivos de errores.
  • emplear técnicas de captura de pantalla y/o grabado de secuencia de acciones. Una herramienta para grabar, de pago es Camtasia que se encuentra en www.techsmith.com.

Fue muy interesante la presentación de Rick, para mí ha sido el mismo problema desde un enfoque diferente. Para terminar recordemos siempre que el código que NO puede tener errores es precisamente el que se encarga del tratamiento de los mismos y que NO es una práctica ni buena ni aceptable, el dejar de controlar los errores y permitir que el control de errores de VFP sea el que reciba el usuario.

Tuvimos un corto receso que apenas dio tiempo a comprar un par de libros MegaFox y KiloFox que me apetecía muchísimo tener, ambos de Marcia Akins, Andy Kramek y Rick Shummer. Libros excelentes ... y ya puestos, pues compré otro par de Tamar Grannor. En este momento fue cuando tuve el placer de conocer a Hugo Ranea, quien es usuario de PortalFox y miembro de la comunidad, apenas nos saludamos; fue un placer Hugo. Un poquito de charla con Cathy Pountney y Craig Berston y para clase nuevamente ... café en mano, por supuesto.

Era el turno de Marcia Akins quien nos habló de las Mejores prácticas en el diseño de clases (Best Practices for Class Design).
 

Hemos escuchado mucho sobre diseño de clases y aparentemente este es un tema muy trillado y no es así, es un tema muy importante y por eso no podía faltar en esta Conferencia y no podía ser otra mejor que Marcia Akins quien es una gran experta en el diseño de clases.

La presentación se refirió todo el tiempo al ejemplo clásico de un navegador en un formulario sencillo, con una tabla y varios textbox que muestran datos relativos a la dirección de ... pues da igual, de usuario, proveedor, etc. Es difícil encontrar un ejemplo más frecuente que este. En este ejemplo, al escribir el nombre de la persona, txtNombre tiene el código que busca la dirección y la muestra o muestra los controles en blanco para introducir una nueva. Pues bien, al inicio lo mostró sin clases, codificando cada botón del navegador: cmdAnterior, cmdPosterior, etc. Esto no está mal; pero no es buena práctica porque se olvida del todo del diseño de clases.

Hablando de diseño, pues se refirió a tres palabras mágicas aquí: MUST, COULD, SHOULD, que en español, las pudiéramos traducir como DEBE, PUEDE, PODRÍA, ¿y eso qué significa? Pues significa que en el diseño hay que tener en cuenta lo que debe, puede y podría hacer cada elemento. Veamos un par de ejemplos:

  • Controlar que la tabla esté abierta - SHOULD - En realidad no es trabajo del navegador, la tabla debe estar abierta para otras tareas del formulario, aunque no está mal verificarlo aquí, se PODRÍA hacer.
  • Mover el puntero del registro - MUST - Es el navegador quien TIENE que mover el puntero, nadie más en el formulario.

Al diseñar es necesario tener en cuenta diferentes acciones a realizar: componer, agregar y delegar.

Al diseñar una clase mediante la composición lo que se hace es unir varios elementos en un contenedor y pasar las funciones de control de las acciones al contenedor, en este mismo caso de una dirección, unimos todos los textos y las funciones de encontrar una dirección determinada, a partir, por ejemplo de un nombre de usuario, ya no se realiza por el textbox del nombre sino que este llama a un método del contenedor. De esta forma podemos pegar esta clase compuesta en cualquier caso que necesitemos dirección y con cuidado de controlar bien los parámetros que ha de recibir tenemos garantizada la funcionalidad.

Pero la dirección no tiene exactamente los mismos parámetros en diferentes países y es posible que haya que agregar elementos "al vuelo", pues las dos funciones, NEWOBJECT() y CREATEOBJECT() se encargan de ello.

Y en tercer caso, es cuando nos olvidamos por completo de programar en en el contenedor, o en cada elemento del mismo y delegamos todas las funciones a una clase externa, que se encarga de todo, en ese caso tenemos, por ejemplo, un botón buscar que hereda de un botón Action que hereda a su vez de una clase session, genérica, que exige mucho cuidado en su programación y tener en cuenta las diferentes circunstancias en las que puede ser llamada, la recomendación es tener mucho cuidado con los parámetros, ni muchos ni pocos, los necesarios.

Marcia habló de varios aspectos más y contó con el apoyo de Andy Kramek, Tamar Grannor y Doug Hennig quienes aportaron sus experiencias personales.

Nancy Folsom durante el almuerzoNos despedimos de Marcia agradeciendo la forma amena de presentar el tema. Llegó la hora de almorzar. Fue un almuerzo tranquilo, sin keynotes, ni tareas, un descanso, que compartí con Hugo Ranea, su jefe y un grupo de participantes más. Hablamos de nuestras participaciones en eventos, de los futuros eventos, tanto en EE.UU. como en Europa, hablamos de Fox y de .NET, en este evento, no hay sesiones de .NET, no hay interoperabilidad ... creo; pero en el salón de al lado hay una conferencia cuyo tema es "Lo mejor de .NET", y es lo que pone en grande en las credenciales de los participantes.

Will Helzen tuvo un acierto al poner bien grande los nombres, se agradece, es muy fácil identificar a la gente ... aunque claro, no dice nada sobre Fox ... bueno, en la mía si, creo que seré la única :), mi credencial pone PortalFox !!! Yupi yupi !!! Estoy en una conferencia de Fox.

Aproveché para hablar con Nancy Folsom (foto), porque yo no había entendido una sugerencia que hizo en el tema de depuración y resultó que era emplear CREATE VIEW, ah bien, es un comando muy bueno que nos permite conocer el entorno actual.

Saludos,

Ana

 




Todas las marcas y los logos utilizados en este sitio son propiedad de sus respectivos dueños.
Los artículos, noticias y comentarios son propiedad y responsabilidad de sus respectivos autores.
Copyright © 2000-2007 PortalFox. Todos los derechos reservados.