Segmenter du code AL et réduire les conflits de noms avec les espaces de noms
Les espaces de noms permettent d’organiser du code en groupes et hiérarchies logiques, ce qui permet d’éviter les conflits de noms pouvant survenir lorsque des bibliothèques sont combinées. Les espaces de noms garantissent l’unicité des noms de code et permettent la réutilisation de noms dans différents contextes. Les espaces de noms fournissent une structure à la base de code, facilitant ainsi la navigation et la compréhension. Les espaces de noms sont utilisés dans de nombreux langages de programmation et avec Business Central, ils sont disponibles avec AL.
Un fichier AL déclare un espace de noms au début du fichier et tous les objets du fichier de code appartiennent à cet espace de noms. Un objet donné ne peut appartenir qu’à un seul espace de noms, mais le même espace de noms peut être utilisé pour plusieurs fichiers AL, c’est-à-dire pour plusieurs objets et pour plusieurs modules. Deux règles de compilation s’appliquent spécifiquement aux espaces de noms et à la dénomination des objets :
Vous ne pouvez avoir qu’un seul objet d’un genre portant le même nom dans un module.
Vous ne pouvez avoir qu’un seul objet d’un genre portant le même nom dans un espace de noms.
Renommer des noms d’objets ou de membres existants est un changement cassant. Par conséquent, les espaces de noms ne peuvent qu’aider à la structure logique des objets existants.
Toute application qui dépend de votre application casse si vous renommez des espaces de noms. De même, votre application casse si l’une de vos applications dépendantes renomme ses espaces de noms.
Vous devez déclarer un espace de noms dans AL à l’aide du mot clé namespace suivi du nom de l’espace de noms. Voici quelques bonnes pratiques pour les mots clés d’espace de noms :
Un espace de noms doit être globalement unique.
La première partie d’un espace de noms est liée à l’organisation en développement ou à un individu, suivie du nom d’un produit et d’un regroupement logique au sein du produit, par exemple
namespace BigCompany.SmartProduct.SomeProductArea. Cela prend en charge les deux objectifs des espaces de noms : le nom d’objet unique et le regroupement logique des fonctionnalités associées.Utilisez un nom stable et non spécifique à une version pour l’espace de noms. Changer le nom d’un espace de noms est un changement cassant.
Le nom de l’espace de noms peut être tout identificateur AL valide et comporter des points pour indiquer une hiérarchie d’espaces de noms.
L’exemple suivant illustre la syntaxe de la déclaration d’un espace de noms. Tous les objets déclarés dans le fichier de code appartiennent à l’espace de noms MyNamespace. La syntaxe présentée ici est à des fins d’illustration, car il est toujours judicieux de séparer les objets en différents fichiers et d’utiliser le même nom pour le fichier et l’objet. Pour en savoir plus, consultez Bonnes pratiques relatives au code AL.
namespace MyNamespace;
// codeunits, tables, pages....
Désormais, vous devez faire référence aux objets dans MyNamespace à l’aide du nom complet ou de la directive using. Pour en savoir plus, consultez Directive using.
Vous pouvez déclarer plus d’objets dans le même espace de noms à l’aide de la même déclaration d’espace de noms dans d’autres fichiers .al. Tous les fichiers de code qui utilisent la même déclaration d’espace de noms appartiennent au même espace de noms.
La directive using
Vous pouvez faire référence aux objets dans d’autres espaces de noms à l’aide du nom complet ou de la directive using. La directive using permet de faire référence aux objets dans d’autres espaces de noms sans avoir à utiliser le nom complet. La directive using est placée en haut du fichier .al, après la déclaration d’espace de noms et avant toute déclaration d’objet. L’exemple suivant illustre l’ordre de la déclaration d’espace de noms et de la directive using. L’ordre des directives using n’a pas d’importance.
namespace MyNamespace;
using SomeOtherNamespace;
codeunit 10 MyCode
{
...
}
Lorsque les objets sont résolus, ils le sont d’abord à l’aide de l’étendue la plus proche. Par conséquent, la référence doit résoudre un objet nommé de manière similaire dans une extension dépendante à l’aide d’un nom complet. Il est également possible de définir des directives using pour faire référence à des espaces de noms externes et éviter les noms complets pour les références aux objets qu’ils comportent.
Un espace de noms imbriqué est un espace de noms déclaré dans un autre. Les espaces de noms imbriqués permettent une dénomination meilleure et plus structurée des objets plutôt que de devoir exprimer la structure complète dans le nom d’objet à 30 caractères. La syntaxe suivante illustre une déclaration d’espace de noms imbriqué de MyNestedNamespace dans l’espace de noms MyNamespace, séparée par un point.
namespace MyNamespace.MyNestedNamespace;
Dans l’exemple, le nom complet de l’espace de noms est MyNamespace.MyNestedNamespace. Ensuite, vous devez faire référence aux objets dans l’espace de noms MyNestedNamespace à l’aide du nom complet ou de la directive using. Ainsi, pour pouvoir accéder aux objets déclarés dans MyNestedNamespace, intégrez l’instruction suivante à votre code :
using MyNamespace.MyNestedNamespace
Des actions de code vous permettent d’ajouter des espaces de noms à la source existante. Pour en savoir plus, consultez Actions de code.
Résumé
Un fichier AL peut définir un espace de noms en haut, qui s’applique à tous les objets du fichier de code. Un objet donné ne peut appartenir qu’à un seul espace de noms, mais le même espace de noms peut être utilisé pour plusieurs fichiers AL et plusieurs objets.
Lorsque les objets sont résolus, l’étendue la plus proche est utilisée en premier. Par conséquent, la référence doit résoudre un objet nommé de manière similaire dans une extension dépendante à l’aide d’un nom complet. Vous pouvez également définir des directives using pour inclure des espaces de noms externes et omettre les noms complets.
Comme les espaces de noms sont utiles pour la segmentation logique des extensions, l’Explorateur AL affiche également les espaces de noms pour les objets et permet de regrouper les objets par espace de noms. Cela facilite la détection des objets associés, la concentration sur les sous-domaines d’application et l’identification des incohérences lors de l’ajout de nouveaux objets.
Les espaces de noms imbriqués fournissent une meilleure dénomination des objets que l’expression de la structure complète dans le nom d’objet à 30 caractères. Cependant, renommer des objets existants est un changement cassant, donc cette fonctionnalité aide principalement à la structure logique des objets existants et aux nouveaux noms à venir.
Voici un exemple d’objets d’application de base regroupés par espace de noms, avec la table Customer résidant dans l’espace de noms Microsoft.Sales.Customer. Le regroupement d’objets par espace de noms comme celui-ci facilite la concentration sur les objets associés et leur recherche.
