Buenas prácticas al nombrar objetos en GeneXus
El nombrar objetos de forma correcta y mediante una nomenclatura específica es muy importante ya que estandariza el nombre de los objetos en una KB. Esto es más importante aún cuando intervienen varios desarrolladores, ya que los objetos tendrán una misma nomenclatura y los desarrolladores sabrán como encontrar o crear rápidamente un objeto.
Por ejemplo, si no tenemos una forma consistente de nombrar objetos, cada programador podría asignarle un nombre según su experiencia. Por ejemplo, para obtener el nombre de un cliente podríamos tener casos como estos:
- ObtenerNombreDeCliente
- NombreDeCliente
- TraerNombreCliente
En base a lo anterior, y teniendo en cuenta que en una KB pueden trabajar varios programadores, se vuelve inmanejable encontrar un objeto puntual, lo que lleva a la duplicación de código. Esto nos hace perder productividad ya que tenemos más de un objeto haciendo lo mismo. A su vez genera un problema al momento de testear o realizar una corrección puesto que es difícil saber si un problema se corrigió en todos los objetos duplicados.
Como funcionan otros lenguajes
Normalmente en el desarrollo orientado a objetos, se definen métodos y atributos para una clase, ej.:
Clase:Customer
SetName()
GetName()
GetName()
Y en el código, luego de instanciar la clase se invoca de la siguiente forma:
var Customer1 = new Customer()
var vName = Customer1.GetName()
De esta forma es sencillo saber que GetName trabaja con la entidad Customer.
Como podemos hacer en GeneXus
Trabajando en GeneXus, al utilizar procedimientos, data providers y otros objetos, no tenemos un prefijo indicando la entidad. Esto es sumamente importante para saber de antemano la entidad afectada por un determinado objeto.
Para nombrar objetos se propone la siguiente nomenclatura (algo similar a la nomenclatura GIK para atributos):
Entidad [+ Calificador] [+Acción]
Ejemplo:
CustomerNameGet
CustomerNameSet
CustomerCreate
CustomerUpdate
De esta forma, cuando estemos desarrollando nos será más sencillo identificar si existe un objeto que implemente una determinada funcionalidad sobre una determinada entidad.
Por ejemplo, en el panel de selección de objetos, solo con el nombre de la entidad se nos desplegarán los objetos relacionados a la misma:
Otro punto no menor será estandarizar las acciones. Si no hacemos esto, se nos generarán dudas para saber lo que hace un determinado objeto.
Por ejemplo, para insertar un nuevo cliente podríamos tener los objetos:
- CustomerNew
- CustomerAdd
- CustomerInsert
En lugar de lo anterior, si se deja explicito que para insertar un nuevo registro la acción es "Insert", no habrá dudas de lo que hace el procedimiento.
Excelente!
ResponderBorrarMuchas gracias Daniel, me gustaría saber cómo se puede utilizar la programación modular con Genexus, de antemano muchas gracias
ResponderBorrar