

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Ramo per modello di astrazione
<a name="branch-by-abstraction"></a>

Lo schema Strangler Fig funziona bene quando è possibile intercettare le chiamate sul perimetro del monolite. Tuttavia, se desideri modernizzare i componenti che esistono più a fondo nello stack di applicazioni legacy e hanno dipendenze a monte, ti consigliamo il pattern branch by abstraction. Questo modello consente di apportare modifiche alla base di codice esistente per consentire alla versione modernizzata di coesistere in sicurezza con la versione precedente senza causare interruzioni.

Per utilizzare correttamente il pattern branch by abstraction, segui questa procedura:

1. Identifica i componenti monolitici che hanno dipendenze a monte. 

1. Crea un livello di astrazione che rappresenti le interazioni tra il codice da modernizzare e i suoi client.

1. Una volta completata l'astrazione, modifica i client esistenti per utilizzare la nuova astrazione. 

1. Crea una nuova implementazione dell'astrazione con la funzionalità rielaborata all'esterno del monolite. 

1. Passa l'astrazione alla nuova implementazione quando sei pronto. 

1. Quando la nuova implementazione fornisce tutte le funzionalità necessarie agli utenti e il monolite non è più in uso, pulisci l'implementazione precedente. 

Il pattern branch by abstraction viene spesso confuso con i [feature toggles](http://martinfowler.com/bliki/FeatureToggle.html), che consentono inoltre di apportare modifiche al sistema in modo incrementale. La differenza è che i feature toggle hanno lo scopo di consentire lo sviluppo di nuove funzionalità e mantenerle invisibili agli utenti quando il sistema è in esecuzione. I feature toggle vengono quindi utilizzati in fase di implementazione o in fase di esecuzione per scegliere se una particolare funzionalità o un insieme di funzionalità sono visibili nell'applicazione. Branch by abstraction è una tecnica di sviluppo e può essere combinata con feature toggles per passare dalla vecchia alla nuova implementazione.

La tabella seguente spiega i vantaggi e gli svantaggi dell'utilizzo del pattern branch by abstraction.


****  

| Vantaggi | Svantaggi | 
| --- | --- | 
|  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/modernization-decomposing-monoliths/branch-by-abstraction.html)  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/modernization-decomposing-monoliths/branch-by-abstraction.html)  | 

L'illustrazione seguente mostra il modello di astrazione, diramato per astrazione, di un componente *Notification* nel monolite assicurativo. Inizia con la creazione di un abstract o di un'interfaccia per la funzionalità di notifica. In piccoli incrementi, i client esistenti vengono modificati per utilizzare la nuova astrazione. Ciò potrebbe richiedere la ricerca nella codebase di chiamate APIs relative al componente *Notification*. Create la nuova implementazione della funzionalità di notifica come microservizio all'esterno del vostro monolite e la ospitate nell'architettura modernizzata. All'interno del monolite, l'interfaccia di astrazione appena creata funge da broker e richiama la nuova implementazione. In piccoli incrementi, trasferisci la funzionalità di notifica alla nuova implementazione, che rimane inattiva fino a quando non è completamente testata e pronta. Quando la nuova implementazione è pronta, sostituisci l'astrazione per utilizzarla. Ti consigliamo di utilizzare un meccanismo di commutazione che possa essere invertito facilmente (come un interruttore di funzionalità) in modo da poter tornare facilmente alla vecchia funzionalità in caso di problemi. Quando la nuova implementazione inizia a fornire tutte le funzionalità di notifica agli utenti e il monolite non è più in uso, potete ripulire l'implementazione precedente e rimuovere qualsiasi indicatore di funzionalità di commutazione che potreste aver implementato

![\[Scomposizione dei monoliti in microservizi utilizzando il pattern branch by abstraction\]](http://docs.aws.amazon.com/it_it/prescriptive-guidance/latest/modernization-decomposing-monoliths/images/branch-by-abstraction.png)
