Introduzione allo sviluppo di app aziendali

Nota

Questo eBook è stato pubblicato nella primavera del 2017 e non è stato aggiornato da allora. C'è molto nel libro che rimane prezioso, ma alcuni dei materiali sono obsoleti.

Indipendentemente dalla piattaforma, gli sviluppatori di app aziendali affrontano diverse sfide:

  • Requisiti dell'app che possono cambiare nel tempo.
  • Nuove opportunità e sfide aziendali.
  • Feedback continuo durante lo sviluppo che può influire significativamente sull'ambito e sui requisiti dell'app.

Tenendo presente questi aspetti, è importante creare app che possono essere facilmente modificate o estese nel tempo. La progettazione per tale adattabilità può essere difficile perché richiede un'architettura che consente di sviluppare e testare in modo indipendente le singole parti dell'app in isolamento senza influire sul resto dell'app.

Molte app aziendali sono sufficientemente complesse da richiedere più sviluppatori. Può essere una sfida significativa decidere come progettare un'app in modo che più sviluppatori possano lavorare in modo efficace su parti diverse dell'app in modo indipendente, garantendo al tempo stesso che le parti si uniscino perfettamente quando integrate nell'app.

L'approccio tradizionale alla progettazione e alla creazione di un'app comporta ciò che viene definito app monolitica, in cui i componenti sono strettamente associati senza una netta separazione tra di essi. In genere, questo approccio monolitico porta ad app difficili e inefficienti da gestire, perché può essere difficile risolvere i bug senza interrompere altri componenti nell'app e può essere difficile aggiungere nuove funzionalità o sostituire le funzionalità esistenti.

Un rimedio efficace per queste sfide consiste nel partizionare un'app in componenti separati e ad accoppiamento libero che possono essere facilmente integrati insieme in un'app. Un approccio di questo tipo offre diversi vantaggi:

  • Consente di sviluppare, testare, estendere e gestire singole funzionalità da parte di singoli utenti o team diversi.
  • Promuove il riutilizzo e una netta separazione delle problematiche tra le funzionalità orizzontali dell'app, ad esempio l'autenticazione e l'accesso ai dati, e le funzionalità verticali, ad esempio funzionalità aziendali specifiche dell'app. Ciò consente di gestire più facilmente le dipendenze e le interazioni tra i componenti dell'app.
  • Consente di mantenere una separazione dei ruoli consentendo a utenti diversi, o team, di concentrarsi su un'attività specifica o su una parte di funzionalità in base alle proprie competenze. In particolare, offre una separazione più pulita tra l'interfaccia utente e la logica di business dell'app.

Esistono tuttavia molti problemi che devono essere risolti durante il partizionamento di un'app in componenti separati e ad accoppiamento libero. tra cui:

  • Decidere come fornire una netta separazione delle problematiche tra i controlli dell'interfaccia utente e la relativa logica. Una delle decisioni più importanti quando si crea un'app Xamarin.Forms aziendale è se inserire la logica di business nei file code-behind o se creare una netta separazione dei problemi tra i controlli dell'interfaccia utente e la relativa logica, per rendere l'app più gestibile e testabile. Per ulteriori informazioni, consultare Model-View-ViewModel.
  • Determinazione dell'uso di un contenitore di inserimento delle dipendenze. I contenitori di inserimento delle dipendenze riducono l'accoppiamento delle dipendenze tra oggetti fornendo una funzionalità per costruire istanze di classi con le relative dipendenze inserite e gestirle in base alla configurazione del contenitore. Per altre informazioni, vedere Inserimento delle dipendenze.
  • Scelta tra l'evento fornito dalla piattaforma e la comunicazione basata su messaggi ad accoppiamento libero tra i componenti che sono scomodi per il collegamento tramite riferimenti a oggetti e tipi. Per altre informazioni, vedere Introduzione alla comunicazione tra componenti ad accoppiamento libero.
  • Decidere come spostarsi tra le pagine, tra cui come richiamare la navigazione e dove risiedere la logica di spostamento. Per altre informazioni, vedere Navigazione.
  • Determinazione della modalità di convalida dell'input dell'utente per la correttezza. La decisione deve includere come convalidare l'input dell'utente e come notificare all'utente gli errori di convalida. Per ulteriori informazioni, consultare Convalida.
  • Decidere come eseguire l'autenticazione e come proteggere le risorse con autorizzazione. Per altre informazioni, vedere Autenticazione e autorizzazione.
  • Determinazione di come accedere ai dati remoti dai servizi Web, tra cui come recuperare in modo affidabile i dati e come memorizzare nella cache i dati. Per altre informazioni, vedere Accesso ai dati remoti.
  • Decidere come testare l'app. Per altre informazioni, vedere Testing unità.

Questa guida fornisce indicazioni su questi problemi e si concentra sui modelli di base e sull'architettura per la creazione di un'app aziendale multipiattaforma usando Xamarin.Forms. Le linee guida consentono di produrre codice adattabile, gestibile e testabile, risolvendo scenari di sviluppo di app aziendali comuni Xamarin.Forms e separando le problematiche della presentazione, della logica di presentazione e delle entità tramite il supporto per il modello Model-View-ViewModel (MVVM).

Applicazione di esempio

Questa guida include un'applicazione di esempio, eShopOnContainers, che è un negozio online che include le funzionalità seguenti:

  • Autenticazione e autorizzazione per un servizio back-end.
  • Esplorazione di un catalogo di camicie, tazze di caffè e altri articoli di marketing.
  • Filtro del catalogo.
  • Ordinamento di elementi dal catalogo.
  • Visualizzazione della cronologia degli ordini dell'utente.
  • Configurazione delle impostazioni.

Architettura dell'applicazione di esempio

La figura 1-1 offre una panoramica generale dell'architettura dell'applicazione di esempio.

eShopOnContainers high-level architecture

Figura 1-1: architettura generale di eShopOnContainers

L'applicazione di esempio viene fornita con tre app client:

  • Un'applicazione MVC sviluppata con ASP.NET Core.
  • Un'applicazione a pagina singola sviluppata con Angular 2 e Typescript. Questo approccio per le applicazioni Web evita l'esecuzione di un round trip al server con ogni operazione.
  • Un'app per dispositivi mobili sviluppata con Xamarin.Forms, che supporta iOS, Android e la piattaforma UWP (Universal Windows Platform) (UWP).

Per informazioni sulle applicazioni Web, consultare Progettazione e sviluppo di applicazioni Web moderne con ASP.NET Core e Microsoft Azure.

L'applicazione di esempio include i servizi back-end seguenti:

  • Microservizio identity, che usa ASP.NET Core Identity e IdentityServer.
  • Un microservizio di catalogo, ovvero un servizio di creazione, lettura, aggiornamento, eliminazione (CRUD) basato sui dati che utilizza un database di SQL Server tramite EntityFramework Core.
  • Un microservizio di ordinamento, che è un servizio basato su dominio che usa modelli di progettazione basati su dominio.
  • Un microservizio basket, ovvero un servizio CRUD basato sui dati che usa Cache Redis.

Questi servizi back-end vengono implementati come microservizi usando ASP.NET Core MVC e vengono distribuiti come contenitori univoci all'interno di un singolo host Docker. Collettivamente, questi servizi back-end vengono definiti applicazione di riferimento eShopOnContainers. Le app client comunicano con i servizi back-end tramite un'interfaccia Web REST (Representational State Transfer). Per altre informazioni sui microservizi e Docker, vedere Microservizi in contenitori.

Per informazioni sull'implementazione dei servizi back-end, consultare Microservizi .NET: Architettura per applicazioni .NET in contenitori.

App per dispositivi mobili

Questa guida è incentrata sulla creazione di app aziendali multipiattaforma con Xamarin.Formse usa l'app per dispositivi mobili eShopOnContainers come esempio. La figura 1-2 mostra le pagine dell'app per dispositivi mobili eShopOnContainers che forniscono la funzionalità descritta in precedenza.

The eShopOnContainers mobile app

Figura 1-2: App per dispositivi mobili eShopOnContainers

L'app per dispositivi mobili usa i servizi back-end forniti dall'applicazione di riferimento eShopOnContainers. Tuttavia, può essere configurato per utilizzare i dati dei servizi fittizi per coloro che desiderano evitare di distribuire i servizi back-end.

L'app per dispositivi mobili eShopOnContainers esercita le funzionalità seguenti Xamarin.Forms :

  • XAML
  • Controlli
  • Bindings
  • Convertitori
  • Stili
  • Animazioni
  • Comandi
  • Comportamenti
  • Trigger
  • Effetti
  • Renderer personalizzati
  • MessagingCenter
  • Controlli personalizzati

Per altre informazioni su questa funzionalità, vedere la Xamarin.Forms documentazione e Creazione di app per dispositivi mobili con Xamarin.Forms.

Inoltre, gli unit test vengono forniti per alcune classi nell'app per dispositivi mobili eShopOnContainers.

Soluzione app per dispositivi mobili

La soluzione di app per dispositivi mobili eShopOnContainers organizza il codice sorgente e altre risorse in progetti. Tutti i progetti usano cartelle per organizzare il codice sorgente e altre risorse in categorie. La tabella seguente illustra i progetti che costituiscono l'app per dispositivi mobili eShopOnContainers:

Project Descrizione
eShopOnContainers.Core Questo progetto è il progetto PCL (Portable Class Library) che contiene il codice condiviso e l'interfaccia utente condivisa.
eShopOnContainers.Droid Questo progetto contiene codice specifico android ed è il punto di ingresso per l'app Android.
eShopOnContainers.iOS Questo progetto contiene codice specifico iOS ed è il punto di ingresso per l'app iOS.
eShopOnContainers.UWP Questo progetto contiene piattaforma UWP (Universal Windows Platform) codice specifico (UWP) ed è il punto di ingresso per l'app di Windows.
eShopOnContainers.TestRunner.Droid Questo progetto è lo strumento di esecuzione dei test Android per il progetto eShopOnContainers.UnitTests.
eShopOnContainers.TestRunner.iOS Questo progetto è lo strumento di esecuzione dei test iOS per il progetto eShopOnContainers.UnitTests.
eShopOnContainers.TestRunner.Windows Questo progetto è il testrunner piattaforma UWP (Universal Windows Platform) per il progetto eShopOnContainers.UnitTests.
eShopOnContainers.UnitTests Questo progetto contiene unit test per il progetto eShopOnContainers.Core.

Le classi dell'app per dispositivi mobili eShopOnContainers possono essere riutilizzate in qualsiasi Xamarin.Forms app con poche o nessuna modifica.

Progetto eShopOnContainers.Core

Il progetto eShopOnContainers.Core PCL contiene le cartelle seguenti:

Folder Descrizione
Animazioni Contiene classi che consentono l'utilizzo delle animazioni in XAML.
Comportamenti Contiene comportamenti esposti alle classi di visualizzazione.
Controlli Contiene controlli personalizzati usati dall'app.
Convertitori Contiene convertitori di valori che applicano la logica personalizzata a un'associazione.
Effetti Contiene la EntryLineColorEffect classe utilizzata per modificare il colore del bordo di controlli specifici Entry .
Eccezioni Contiene l'oggetto personalizzato ServiceAuthenticationException.
Estensioni Contiene metodi di estensione per le classi VisualElement e IEnumerable.
Helper Contiene classi helper per l'app.
Modelli Contiene le classi del modello per l'app.
Proprietà Contiene AssemblyInfo.cs, un file di metadati dell'assembly .NET.
Servizi Contiene interfacce e classi che implementano i servizi forniti all'app.
Trigger Contiene il BeginAnimation trigger, usato per richiamare un'animazione in XAML.
Validations Contiene classi coinvolte nella convalida dell'input di dati.
ViewModels Contiene la logica dell'applicazione esposta alle pagine.
Visualizzazioni Contiene le pagine per l'app.
Progetti della piattaforma

I progetti della piattaforma contengono implementazioni di effetti, implementazioni del renderer personalizzate e altre risorse specifiche della piattaforma.

Riepilogo

Gli strumenti e le piattaforme di sviluppo di app per dispositivi mobili multipiattaforma di Xamarin offrono una soluzione completa per le app client per dispositivi mobili B2E, B2B e B2C, offrendo la possibilità di condividere il codice in tutte le piattaforme di destinazione (iOS, Android e Windows) e di ridurre il costo totale di proprietà. Le app possono condividere l'interfaccia utente e il codice della logica dell'app, mantenendo allo stesso tempo l'aspetto della piattaforma nativa.

Gli sviluppatori di app aziendali affrontano diverse sfide che possono modificare l'architettura dell'app durante lo sviluppo. È quindi importante creare un'app in modo che possa essere modificata o estesa nel tempo. La progettazione per tale adattabilità può essere difficile, ma in genere comporta il partizionamento di un'app in componenti separati e ad accoppiamento libero che possono essere facilmente integrati in un'app.