Importanza delle interfacce

Completato

Data la natura dell'estendibilità dell'enumerazione, l'adozione di interfacce ed enumerazioni consente di scrivere logica di business che potrà essere sostituita in un secondo momento senza influire sull'uso del codice, ammesso che la nuova funzionalità sia conforme all'interfaccia definita. Le sezioni che seguono illustrano alcuni esempi di questo scenario.

Esempio 1: gestione veicoli

In questo scenario, è necessario aggiungere supporto per la gestione dei veicoli. Si può definire un'interfaccia che esprima il contratto per le funzionalità di un veicolo, ad esempio la velocità massima o la capacità di carico utile.

È stato possibile implementare tipi di veicolo diversi, ad esempio auto, camion e bus, tutti conformi al contratto dell'interfaccia. In questo scenario, l'uso del codice può essere basato sul concetto di polimorfismo per creare una variabile di tipo interface e chiamare metodi sull'interfaccia, che funzionerà indipendentemente dal fatto che nella variabile venga passato auto, camion o bus.

Esempio 2: calcolo prezzo

Un altro esempio è tratto dall'applicazione di base nel primo ciclo di rilascio 2020 (versione 16), in cui le interfacce vengono usate in varie posizioni per aggiungere logica di business estendibile. Una di queste posizioni è PriceCalculation per i documenti di vendita, in cui un'interfaccia definisce le capacità di calcolo prezzo. Vengono fornite due implementazioni: una simile al secondo ciclo di rilascio 2019 2 (versione 15) per la compatibilità con le versioni precedenti e una nuova implementazione per la versione 16.

Al momento di dichiarare l'interfaccia, è necessario prima considerare il nuovo oggetto interfaccia. Si noti che non dispone di un ID oggetto perché non può essere eseguito da se stesso. L'interfaccia ha anche un nome.

L'interfaccia definisce quindi le sue funzionalità attraverso procedure, ma solo con firme: nome, parametri, tipo restituito e visibilità. L'interfaccia non contiene l'implementazione delle procedure, ma deve essere implementata da altri oggetti.

Lo screenshot seguente mostra un esempio di implementazione dell'interfaccia Calcolo prezzi. Una codeunit può implementare più interfacce delimitate da virgole. La codeunit deve implementare tutti i metodi di interfaccia.

Il compilatore conferma che una codeunit sia conforme alle interfacce che implementa. Se mancano metodi, è disponibile un'azione di codice di correzione rapida per aggiungere stub di firma per i metodi di interfaccia mancanti.

Suggerimento

È possibile usare questo processo durante la prima creazione dell'implementazione per procedere rapidamente.

Codeunit diverse possono implementare la stessa interfaccia in modo diverso. In questo scenario è un'altra codeunit a implementare l'interfaccia Calcolo prezzo, in questo caso Calcolo prezzo per la versione 15.

Come mostrato nell'immagine, l'implementazione effettiva dei metodi, ad esempio ApplyDiscount, è diversa.

Le enumerazioni estendibili supportano l'implementazione di un'interfaccia. Il valore dell'enumerazione può essere assegnato a una variabile di interfaccia che può inizializzare l'interfaccia. In questo modo, è possibile usare l'enumerazione per scegliere l'implementazione specifica da usare per una determinata interfaccia. In questo scenario, si dovrebbe scegliere l'implementazione di PriceCalculation da usare: v15 o v16.

Ad esempio, se si desidera sostituire PriceCalculation, si deve procedere come segue:

  1. Creare una nuova implementazione per l'interfaccia PriceCalculation.

  2. Estendere l'enumerazione con un valore che restituisce una nuova implementazione.

  3. Configurare l'uso di una nuova implementazione.

Per altre informazioni, consultare Estensione dei calcoli dei prezzi.