Limitación de X++

Si bien es muy probable que ya muchos lo sepan, pero me gustaría comentar ciertas limitaciones del entorno de programación lenguaje X++ que en un comienzo yo no conocía y que pueden ser muy útiles de saber para otros desarrolladores.

Debe existir unas cuantas más, así que conocen bienvenido el comentario.

No se puede reutilizar el código de un formulario por el siempre hecho de que los formularios no son verdaderas clases

Es decir si hacen la simple prueba de cambiar el extends ObjectRun por object, implementar un interfaz o cambiar nombre no verá ningún resultado palpable.

Tampoco se puede implementar un comportamiento genérico para cierto formulario, aunque hay algunos trucos para lograrlo.

En fin, resumiendo, los forms no son clases, sino simplemente un esquema de árbol que especifica como debe construirse una interfaz grafica a partir de objetos concretos con botones, cajas de texto, etc.

Estas limitaciones también aplican a los formularios que tienen el mismo comportamiento.

Esta forma de construcción de estos elementos me hace recordar un poco a la programación orientada a prototipos, claro que es una versión simplificada y muy práctica.

Ciertas clases no son accesibles al programador X++

Si bien gran parte de la lógica del sistema está escrita en X++, existen clases de kernel que no pueden ser modificadas.
Un ejemplo de ellas son todas las que empiezan con x*. XRecord, XSession, etc.

El límite no es del todo claro. Algunas veces y se pueden llegar a encontrar puertitas para introducir código en procesos centrales del sistema.

Todas las tablas comparten una definición común (Common)

Esta definición permite que todas las tablas, por ejemplo, puedan llevar un campo que identifique la empresa, fecha y hora de creación, modificación, ect.

Pero a pesar de que ayudaría mucho, no existe un mecanismo para agregar campos por defecto a nuestras tablas modificando la tabla base common.

Un formulario/reporte es un objeto indivisible

Usando el comparador se pueden detectar algunas limitaciones en la detección de cambios.
Por ejemplo si modificamos un método dentro de una tabla, funcio no distinge capas.

El lenguaje X++ no es 100% orientado a objetos


No existe el polimorfismo.

0 comentarios: