Microsoft Dynamics AX. Una de las cosas buenas en el desarrollo de software es que se pueden utilizar soluciones de diseño que han sido probadas y diseñadas para otros sistemas. Pero ¿Cómo se logra que una solución de diseño pueda ser utilizada en otro sistema incluso si el lenguaje de programación es diferente?, bien, la respuesta es Patrones de diseño.
Se puede decir que un Patrón de diseño es un lenguaje común que utilizan los desarrolladores en el cual se establece un problema y una solución a un diseño.
Al tratarse de un lenguaje común que los desarrolladores utilizan, esto puede ser adaptable a cualquier lenguaje de programación orientado a objetos (POO), en nuestro caso, puede ser desarrollado e implementado en x++.
Microsoft Dynamics AX al tratarse de un sistema con una solución completa orientada a satisfacer varios aspectos claves del negocio de las empresas requiere de soluciones técnicas que puedan adaptarse al cambio según se requiera, esto demanda contar con desarrollos que puedan ser escalables y portable en un futuro.
Microsoft Dynamics AX no es la excepción, ya que cuenta con soluciones técnicas estándar que hacen uso de Patrones de diseño.
Un ejemplo del uso de estos patrones de diseño se encuentra en la clase InventModelType e InventModelTypeFactory.
A continuación, se explica de manera general la funcionalidad técnica del patrón de diseño factory.
1. Patrón de diseño Factory
Este patrón de diseño forma parte de la categoría de patrones para la creación de objetos/instancias, y su objetivo principal es gestionar la creación, inicialización y configuración de objetos y clases, de esta forma como resultado final tendremos una instancia de un tipo de clase según el requerimiento del negocio requiera.
Se debe considerar que este patrón debe ser utilizado para enfrentar problemas de diseño en la que que exista la necesidad de crear una instancia/objeto de una clase que forma parte de una colección de clases que heredan de una clase padre.
En Microsoft Dynamics AX se tiene la clase InventModelTypeFactory que es utilizada para crear o construir objetos/instancias de las clases que implementan la clase abstracta InventModelType. La solución técnica de este patrón utiliza un tipo de datos enum para adaptarse al contexto de creación de objetos de diferentes clases.
Enum Type: InventModel
Como un aspecto importante de este patrón es que trabaja en una relación de modelos de objetos Padre – Hijos que puede ser adaptada utilizando herencia (clases Abstract)
Clase estándar InventModelType y sus clases heredadas.
La solución estándar para gestionar la creación de objetos es la siguiente:
Aunque dependiendo del contexto y el alcance del problema, la solución estándar no está mal desde ese punto de vista porque lo que trata de cubrir en el siguiente problema es la inicialización de todas sus clases para comprobar un estado particular del negocio.
Se puede agregar para tener una solución más integral hacia problemas que se puedan presentar en un futuro con respecto a la escalabilidad y portabilidad es optar por una solución mucho más flexible y adaptada a cambios, evitando crear modificaciones que puedan afectar a la lógica del negocio en la que se está utilizando este patrón de diseño.
Como una aproximación a la solución para el problema de escalabilidad en el patrón de diseño factory desarrollado por el estándar se ha desarrollado el siguiente componente:
clase TestInventModelTypeFactory.
- Se inicializan mapas para el registro y la carga de las instancias de clases
- Este método permite construir la portabilidad para la creación de las instancias de las clases.
- El método load se encarga de cargar las clases en memoria (mapas)
- Se procede a registrar las clases que se utilizan en el modelo de negocios que se va cubrir.
- Se crea un Job para la prueba final del patrón de diseño.
En este ejemplo se observa una forma diferente de crear instancias de clases y que pueden ser adaptadas de manera flexible y portable para soluciones futuras que se requiera adaptar.
Ismael Utitiaj
Consultor Técnico AX
Attomo Group