Segmentazione del codice AL e riduzione dei conflitti di denominazione con gli spazi dei nomi

Completato

Si usano gli spazi dei nomi per organizzare il codice in gruppi logici e gerarchie, in modo da evitare conflitti di denominazione che possono verificarsi quando le librerie vengono combinate. Gli spazi dei nomi garantiscono l'unicità nei nomi in codice e consentono il riutilizzo dei nomi in contesti diversi. Gli spazi dei nomi forniscono la struttura per la base di codice, agevolando lo spostamento e la comprensione. Si usano gli spazi dei nomi in molti linguaggi di programmazione e con Business Central sono disponibili con AL.

Un file AL dichiara uno spazio dei nomi all'inizio del file e tutti gli oggetti nel file di codice appartengono a quello spazio dei nomi. Un determinato oggetto può appartenere solo a uno spazio dei nomi, ma è possibile usare lo stesso spazio dei nomi per più file AL, il che significa per più oggetti e per più moduli. Due regole del compilatore si applicano in modo specifico agli spazi dei nomi e alla denominazione degli oggetti:

  • È presente un solo oggetto di uno stesso tipo con lo stesso nome in un modulo

  • È presente un solo oggetto di uno stesso tipo con lo stesso nome in uno spazio dei nomi

La ridenominazione di oggetti o membri esistenti è una modifica che causa un'interruzione, pertanto gli spazi dei nomi possono aiutare solo con la struttura logica di oggetti esistenti.

Qualsiasi app che dipende dall'app dell'utente si interrompe se si rinominano gli spazi dei nomi. Analogamente l'app dell'utente si interrompe se una qualsiasi delle dipendenze rinomina i propri spazi dei nomi.

Per dichiarare uno spazio dei nomi in AL, è necessario usare la parola chiave dello spazio dei nomi seguita dal nome dello spazio dei nomi. Alcune best practice per le parole chiave dello spazio dei nomi sono:

  • Uno spazio dei nomi deve essere univoco a livello globale.

  • La prima parte di uno spazio dei nomi è legata allo sviluppatore, seguita dal nome del prodotto e dal raggruppamento logico all'interno del prodotto, ad esempio, namespace BigCompany.SmartProduct.SomeProductArea. Questo supporta i due scopi degli spazi dei nomi: nome dell'oggetto univoco e raggruppamento logico delle funzionalità correlate.

  • Usare un nome stabile e non specifico della versione per lo spazio dei nomi. La modifica del nome di uno spazio dei nomi è una modifica che causa un'interruzione.

  • Il nome dello spazio dei nomi può essere qualsiasi identificatore AL valido e può contenere punti per indicare una gerarchia di spazi dei nomi.

L'esempio seguente mostra la sintassi di una dichiarazione dello spazio dei nomi. Tutti gli oggetti dichiarati nel file di codice appartengono allo spazio dei nomi MyNamespace. La sintassi mostrata qui è a scopo illustrativo, poiché è comunque una procedura consigliata per separare gli oggetti in file diversi e usare lo stesso nome dell'oggetto per il file. Per altre informazioni, vedere Procedure consigliate per il codice AL.

namespace MyNamespace;

// codeunits, tables, pages....

Ora, per fare riferimento agli oggetti in MyNamespace, è necessario usare il nome completo o la direttiva using. Per altre informazioni, vedere Direttiva using.

Per dichiarare più oggetti nello stesso spazio dei nomi, è possibile usare la stessa dichiarazione dello spazio dei nomi in altri file .al. Tutti i file di codice che usano la stessa dichiarazione dello spazio dei nomi appartengono allo stesso spazio dei nomi.

Direttiva using

Per fare riferimento a oggetti in altri spazi dei nomi, è possibile usare il nome completo o la direttiva using. Usare la direttiva using per fare riferimento a oggetti in altri spazi dei nomi senza dover usare il nome completo. La direttiva using si trova nella parte superiore del file .al, dopo la dichiarazione dello spazio dei nomi e prima di qualsiasi dichiarazione dell'oggetto. L'esempio seguente mostra l'ordine della dichiarazione dello spazio dei nomi e della direttiva using. L'ordine delle direttive using non ha importanza.

namespace MyNamespace;
using SomeOtherNamespace;

codeunit 10 MyCode
  {
    ...
  }

Quando si risolvono oggetti, si usa prima l'ambito più vicino. Pertanto, per risolvere un oggetto denominato simile in un'estensione dipendente, il riferimento deve usare un nome completo. In alternativa, è possibile definire direttive using per fare riferimento a spazi dei nomi esterni ed evitare nomi completi per riferimenti a oggetti in essi contenuti.

Uno spazio dei nomi annidato è uno spazio dei nomi dichiarato all'interno di un altro spazio dei nomi. Gli spazi dei nomi annidati consentono una denominazione degli oggetti migliore e più strutturata rispetto alla necessità di esprimere la struttura completa in un nome di oggetto di 30 caratteri. La sintassi seguente mostra una dichiarazione dello spazio dei nomi annidata di MyNestedNamespace all'interno dello spazio dei nomi MyNamespace, separata da un punto.

namespace MyNamespace.MyNestedNamespace;

Nell'esempio, il nome completo dello spazio dei nomi è MyNamespace.MyNestedNamespace. Per fare riferimento a oggetti nello spazio dei nomi MyNestedNamespace, è necessario usare il nome completo o la direttiva using. Pertanto, per poter accedere ad oggetti dichiarati in MyNestedNamespace, includere la seguente istruzione nel codice:

using MyNamespace.MyNestedNamespace

Usare azioni del codice per aggiungere spazi dei nomi all'origine esistente. Per altre informazioni, vedere Azioni del codice.

Riepilogo

Un file AL può definire uno spazio dei nomi nella parte superiore, applicabile a tutti gli oggetti nel file di codice. Un determinato oggetto può appartenere solo a uno spazio dei nomi, ma è possibile usare lo stesso spazio dei nomi per più oggetti e file AL.

Quando gli oggetti vengono risolti, viene utilizzato per primo l'ambito più vicino. Pertanto, per risolvere un oggetto denominato in modo simile in un'estensione dipendente, il riferimento deve usare un nome completo. In alternativa, è possibile definirlo usando direttive per includere spazi dei nomi esterni e omettere i nomi completi.

Poiché gli spazi dei nomi sono utili per la segmentazione logica delle estensioni, Esplora AL mostra anche gli spazi dei nomi per gli oggetti e consente di raggruppare gli oggetti in base allo spazio dei nomi. In questo modo, è più facile individuare oggetti correlati, concentrarsi su aree secondarie dell'app e identificare incoerenze quando si aggiungono nuovi oggetti.

Gli spazi dei nomi nidificati forniscono una migliore denominazione degli oggetti rispetto all'espressione della struttura completa nel nome dell'oggetto di 30 caratteri. Tuttavia, la ridenominazione degli oggetti esistenti è una modifica che causa un'interruzione, pertanto questa funzionalità aiuterà principalmente con la struttura logica degli oggetti esistenti e con i nuovi nomi.

Ecco un esempio di oggetti app di base raggruppati per spazio dei nomi, con la tabella Customer nello spazio dei nomi Microsoft.Sales.Customer. Il raggruppamento di oggetti in base allo spazio dei nomi consente di concentrarsi meglio sulla ricerca di oggetti correlati.

Screenshot degli oggetti app di base raggruppati in base allo spazio dei nomi.