Entradas

Mostrando las entradas de junio, 2022

Como usar GXTest para hacer el refactoring de una funcion de forma mas segura.

Imagen
En mi trabajo me encuentro a menudo con el siguiente problema: Optimizar un determinado objeto GeneXus que anda lento, o consume demasiados recursos (memoria, cpu, disco, ancho de banda, etc).  Por lo general, son objetos de los que son Legacy Code.  Me gusta la definición  Legacy Code = Code without automated unit test.  Tambien es comun que no lo haya programado y tengo una idea de que es lo que hace ese objeto, pero no un conocimiento profundo de como funciona.  Resulta entonces bastante peligroso hacer un cambio en un objeto para lograr que funcione mejor, sin tener una forma de comprobar que sigue teniendo el mismo comportamiento que antes.  Una forma de trabajo que me ha resultado muy util, es ejecutar muchas veces el objeto que debo cambiar, con una combinación de parámetros que sean representativos de los parámetros habituales y de borde del objeto y registrar su resultado. Luego de hacer la modificación, volver a ejecutar las mismas pruebas y asegurarme que todo sigue igual, y

Ejemplo simple de Test Driven Development (TDD) con GeneXus

Imagen
  Hice un video de como utilizar la metodología de desarrollo TDD (Test Driven Development) con GeneXus y GXTest.   Me quedó más largo de lo que quería pero ya voy a aprender a resumir mejor.  Update: A pedido del publico, mejoro la resolucion del video. 

Entity Provider Pattern

Imagen
Estoy intentando hacer un pattern para lograr crear servicios que se puedan crear desde la estructura de una entidad (representada por una transacción).  La documentación va ir  quedando aqui .  Copio aqui la información para que quede documentado.  Objetivo: Facilitar y centralizar el acceso y modificación de los datos de una entidad.  Uso Dada una Entidad (en forma de transacción) facilitar el acceso a sus datos con operaciones comunes.  Ejemplo Dada la transacción Customer Customer * CustomerId CustomerName //tiene indice unico por CustomerName CustomerAddress CustomerType se pueden poner dicha transacción como BC y generar los objetos para lograr: //CONSULTAS (QUERIES) &CustomerCollection = GetAll () // Se implementa con un Customer_DP - Data provider &CustomerCollection = GetBy < Condition >( &ConditionParameters ) // Se implementa con un Customer_DP<Condition> - DataProvider que usa un Data Selector por <Condition> Customer_DS_Conditio