Condividi tramite


Livello intermedio

In questa sezione sono fornite informazioni e istruzioni sull'uso di servizi del dominio, codice condiviso ed entità di dati nel livello intermedio di un'applicazione WCF RIA Services. In un'applicazione a 3 livelli, il livello intermedio contiene la logica per la gestione dell'interazione tra il livello di presentazione e il livello dati. Al livello intermedio vengono applicate regole business e controlli di convalida per assicurarsi che i dati siano in uno stato accettabile. Ad esempio, in un'applicazione delle risorse umane, è possibile fornire un'interfaccia utente che consente ai dipendenti di inviare la richiesta ferie con il controllo che il saldo ferie di un dipendente non diventi mai minore di zero. Pertanto, si aggiunge la logica nel livello intermedio per controllare il saldo ferie del dipendente prima di inviare la richiesta ferie.

Per l'esperienza di utilizzo ottimale di un client RIA Services , ad esempio un'applicazione Silverlight, è spesso opportuno applicare al client le stesse regole business che si applicano al server. Di conseguenza, il codice di livello intermedio del client e del server siano sincronizzati. RIA Services consente di utilizzare .NET Framework per scrivere la logica dell'applicazione nel livello intermedio. RIA Services genera automaticamente il codice per il livello di presentazione dal codice di livello intermedio, pertanto questi livelli sono sempre sincronizzati. In questo argomento e negli argomenti sussidiari viene descritto come utilizzare i servizi del dominio, il codice condiviso e le entità di dati per compilare il livello intermedio.

Livello di accesso ai dati

È possibile utilizzare qualsiasi tipo di livello di accesso ai dati quando si sviluppa il livello intermedio tramite RIA Services . Ad esempio, è possibile connettersi ai seguenti livelli di accesso ai dati:

  • Entity Data Model.

  • Modello a oggetti LINQ to SQL (opzione disponibile solo se è installato RIA Services Toolkit).

  • Oggetto di Common Language Runtime (CLR).

  • Servizio Web che espone dati dall'origine.

È possibile applicare i controlli di convalida al modello di dati per applicare restrizioni ai valori dei dati inviati dal livello di presentazione.

In alcuni casi, è necessario interagire con dati presenti in più tabelle. RIA Services fornisce un framework di programmazione che supporta la modifica di modelli di dati gerarchici (quali una relazione Order e OrderDetails), modelli di dati di ereditarietà (quali una relazione padre e figlio) e modelli di proiezione dei dati (quali la denormalizzazione dei dati tramite il pull di valori dalle tabelle Customer e Address in un solo modello di dati). Per ulteriori informazioni, vedere Dati.

È possibile che nell'applicazione vengano visualizzati dati da una varietà di origini o venga esposta una sola entità a più servizi del dominio. WCF RIA Services abilita questo scenario supportando riferimenti tra entità dai tipi DomainContext diversi. Per ulteriori informazioni, vedere Procedura dettagliata: condivisione di entità tra più servizi del dominio.

Per impostazione predefinita, in RIA Services l'entità originale completa non viene passata con i valori modificati e al livello di accesso ai dati per verificare la concorrenza dei dati. Al contrario, in RIA Services vengono archiviati e passati nuovamente solo i membri contrassegnati con l'attributo RoundtripOriginalAttribute, ConcurrencyCheck o TimeStamp. Per ulteriori informazioni, vedere Dati.

Servizi del dominio

Un servizio del dominio è l'astrazione pubblica della logica di business per un dominio. Include le entità e le operazioni che comprendono la logica di business del dominio. RIA Services fornisce la classe DomainService come classe di base per tutte le classi che servono da interfaccia alla logica di business nel livello dati. Quando si implementa un servizio del dominio, si specificano le classi delle entità che si desidera esporre per l'accesso dal client. È inoltre possibile specificare le operazioni sui dati consentite nel servizio del dominio e aggiungere la logica dell'applicazione al servizio del dominio. Per ogni servizio del dominio che si abilita per l'accesso client, RIA Services genererà una classe DomainContext per l'applicazione client. Per ulteriori informazioni, vedere Servizi del dominio.

Per informazioni sulla sicurezza del servizio del dominio, vedere Sicurezza per WCF RIA Services.

Codice condiviso

In alcuni scenari, è necessario aggiungere un codice condiviso tra il progetto di livello intermedio e il progetto di livello di presentazione, ma non si desidera che quel codice venga inserito nel servizio del dominio o in una classe di entità. Ad esempio, potrebbe essere necessario fare riferimento a una libreria contenente la logica dell'applicazione, utilizzata in molti altri progetti. In alternativa, potrebbe essere necessario creare proprietà personalizzate che combinano o modificano valori dalla classe di entità, quale un nome visualizzato nel formato "cognome, prima lettera del nome". RIA Services consente di includere nel livello intermedio classi o assembly alle quali è possibile accedere senza apportare modifiche nel progetto client. Per ulteriori informazioni, vedere l'argomento Codice condiviso.

Generazione del codice client

Quando si connettono un progetto di livello intermedio e un progetto di livello di presentazione tramite RIA Services , il framework RIA Services genera automaticamente il codice per il client dal livello intermedio. Il codice del client viene generato il codice di livello intermedio riportato di seguito:

  • Ogni servizio del dominio annotato con l'attributo EnableClientAccessAttribute.

  • Ogni classe di entità a cui fa riferimento un servizio del dominio.

  • I file di codice denominati con la convenzione di denominazione condivisa (*.shared.cs o *.shared.vb) vengono copiati senza modificare il progetto client.

Questo codice di livello intermedio è disponibile al client tramite le classi proxy del client. Quando il codice del livello intermedio viene modificato, le classi proxy del client vengono rigenerate automaticamente in modo che il livello di presentazione sia sempre sincronizzato con il livello intermedio.

Per ulteriori informazioni, vedere Generazione del codice client.