Segmentar el código AL y reducir los conflictos de nombres gracias a los espacios de nombres

Completado

Los espacios de nombres se utilizan para organizar el código en grupos lógicos y jerarquías, lo que puede evitar los conflictos de nombres que se generan a veces al combinar bibliotecas. Los espacios de nombres garantizan la exclusividad de los nombres de códigos y permiten la reutilización de nombres en diferentes contextos. Los espacios de nombres proporcionan estructura para la base del código, lo que facilita la navegación y la comprensión. Los espacios de nombres se utilizan en muchos lenguajes de programación; con Business Central, están disponibles con AL.

Un archivo AL declara un espacio de nombres al principio del archivo, y todos los objetos en el archivo de código pertenecen a ese espacio de nombres. Un determinado objeto solo puede pertenecer a un espacio de nombres, pero el mismo espacio de nombres se puede utilizar para varios archivos AL; es decir, para varios objetos y módulos. Hay dos reglas del compilador que se aplican específicamente a los espacios de nombres y a la denominación de objetos:

  • En un determinado módulo, solo puede haber un objeto de un tipo con el mismo nombre.

  • En un determinado espacio de nombres, solo puede haber un objeto de un tipo con el mismo nombre.

Cambiar el nombre de objetos o miembros existentes es un cambio importante, por lo que los espacios de nombres solo pueden contribuir a la estructura lógica de los objetos existentes.

Cualquier aplicación que dependa de su aplicación se interrumpe si cambia el nombre de los espacios de nombres; de la misma manera, su aplicación se interrumpe si alguna de sus dependencias cambia el nombre de sus espacios de nombres.

Para declarar un espacio de nombres en AL, debe utilizar las palabras clave "espacio de nombres", seguidas por el nombre del espacio de nombres. Estos son algunos procedimientos recomendados para las palabras clave en los espacios de nombres:

  • Un espacio de nombres debe ser único de manera global.

  • La primera parte de un espacio de nombres está vinculada a la organización desarrolladora o a un individuo, y va seguida por el nombre del producto y una agrupación lógica dentro de este, como namespace BigCompany.SmartProduct.SomeProductArea. Esto contribuye a los dos objetivos de los espacios de nombres: un nombre de objeto único y una agrupación lógica de funcionalidad relacionada.

  • Para el espacio de nombres, utilice un nombre estable y que no sea específico de ninguna versión. Cambiar el nombre de un espacio de nombres constituye un cambio importante.

  • El nombre del espacio de nombres puede ser cualquier identificador AL válido, y puede contener puntos para indicar una jerarquía.

El siguiente ejemplo muestra la sintaxis de una declaración de espacio de nombres. Todos los objetos declarados en el archivo de código pertenecen al espacio de nombres MyNamespace. La sintaxis que aparece aquí es solo un ejemplo; separar objetos en diferentes archivos y usar el mismo nombre para el archivo y el objeto sigue siendo un procedimiento recomendado. Para obtener más información, consulte Procedimientos recomendados en código AL.

namespace MyNamespace;

// codeunits, tables, pages....

Ahora, para hacer referencia a los objetos en MyNamespace, debe usar el nombre completo o la directiva de uso. Para obtener más información, consulte Directiva de uso.

Para declarar más objetos en el mismo espacio de nombres, puede utilizar la misma declaración de espacio de nombres que en otros archivos .al. Todos los archivos de código que utilizan la misma declaración de espacio de nombres pertenecen al mismo espacio de nombres.

La directiva de uso

Para hacer referencia a objetos en otros espacios de nombres, puede usar el nombre completo o la directiva de uso. La directiva de uso se emplea para hacer referencia a objetos en otros espacios de nombres sin tener que usar el nombre completo. La directiva de uso se coloca en la parte superior del archivo .al, después de la declaración del espacio de nombres y antes de las declaraciones de objetos. El siguiente ejemplo muestra el orden en la declaración del espacio de nombres y la directiva de uso. El orden de las directivas de uso no importa.

namespace MyNamespace;
using SomeOtherNamespace;

codeunit 10 MyCode
  {
    ...
  }

La resolución de objetos se lleva a cabo utilizando primero el ámbito más cercano. Por lo tanto, para resolver un objeto con nombre similar en una extensión dependiente, la referencia debe utilizar un nombre completo. También es posible definir directivas de uso para hacer referencia a espacios de nombres externos y evitar así nombres completos para referencias a objetos en ellos.

Un espacio de nombres anidado es un espacio de nombres declarado dentro de otro espacio de nombres. Los espacios de nombres anidados permiten una denominación de objetos mejor y más estructurada, si comparamos este método con la expresión de la estructura completa en el nombre de objeto de 30 caracteres. La siguiente sintaxis muestra una declaración de espacio de nombres anidado de MyNestedNamespace dentro del espacio de nombres MyNamespace, separado por un punto.

namespace MyNamespace.MyNestedNamespace;

En el ejemplo, el nombre completo del espacio de nombres es MyNamespace.MyNestedNamespace. Para hacer referencia a objetos en el espacio de nombres MyNestedNamespace, debe usar el nombre completo o la directiva de uso. Por lo tanto, para poder acceder a los objetos declarados en MyNestedNamespace, incluya la siguiente instrucción en el código:

using MyNamespace.MyNestedNamespace

Utilice acciones de código para agregar espacios de nombres en el origen existente. Para obtener más información, consulte Acciones de código.

Resumen

Un archivo AL puede definir un espacio de nombres en la parte superior, y se aplica a todos los objetos en el archivo de código. Un determinado objeto solo puede pertenecer a un espacio de nombres, pero el mismo espacio de nombres se puede utilizar para varios objetos y archivos AL.

Cuando se resuelven objetos, primero se utiliza el ámbito más cercano. Por lo tanto, para resolver un objeto con nombre similar en una extensión dependiente, la referencia debe utilizar un nombre completo. También puede definirlo mediante directivas para incluir espacios de nombres externos y omitir nombres completos.

Puesto que los espacios de nombres son útiles para la segmentación lógica de extensiones, el Explorador AL también muestra espacios de nombres para objetos y permite agrupar objetos por espacio de nombres. Eso facilita el descubrimiento de objetos relacionados, el enfoque en subáreas de aplicaciones y la identificación de contradicciones al agregar nuevos objetos.

Los espacios de nombres anidados proporcionan una mejor denominación de los objetos que la expresión de la estructura completa en el nombre de objeto de 30 caracteres. Sin embargo, cambiar el nombre de los objetos existentes constituye un cambio importante, por lo que esta capacidad se utiliza principalmente con la estructura lógica de los objetos existentes y con nombres futuros.

A continuación, mostramos un ejemplo de objetos de aplicación básica agrupados por espacio de nombres, con la tabla Cliente en el espacio de nombres Microsoft.Sales.Customer. Agrupar objetos por espacio de nombres de esta manera facilita la concentración y el descubrimiento de objetos relacionados.

Captura de pantalla de los objetos de la aplicación básica agrupados por espacio de nombres