11

Mar

WCF (O)Data Services + IoC Validation and Business Logic + Transactions + Role/User Based Authorization and Row Filtering

Ciao a tutti

 

tempo fa avevo parlato dei Data Services di WCF http://dotnetlombardia.org/b/tonyexpo/archive/2011/07/13/wcf-data-services-questo-immaturo.aspx una volta detti ADO.NET Data Services

 

La soluzione è pratica negli scenari di DaaS (data –as-a-service) dove è necessario un tier (layer fisico) di servizi per accedere per accedere ai propri dati, nell’ottica principalmente di applicazioni datadriven, o domain-driven non SOA

mi spiego: un sistema n-tier di grandi dimensioni  si rifà al SOA (service oriented architecture) per fornire un insieme di servizi omogenei e autonomi che nell’insieme realizzano il proprio sistema informativo

questo è altamente scalabile e modularizzato

e la business-logic risiede esclusivamente nei servizi, ognuno dei quali, ha in genere il proprio motore di persistenza SQL o NOSQL che sia

 

differentemente device e smartphone portano lo sviluppo software ad andare sempre più obbligatoriamente verso design-pattern enterprise di disegno della UI come MVC (iOS) e MVVM (windows phone) che ben si prestano a gestire anche completamente la business-logic, quando questa è di complessità non troppo vasta (in genere con l’ausilio di design-pattern propri da usare nel tier del device come active-record, etc)

in questi casi creare un tier di servizi che facciano semplicemente copia-incolla dei dati dal motore di persistenza all’XML è quasi inutile

così sono nati i servizi OData (attualmente molto usati anche in ottica OGDI) che servono a fornire un tier di disaccoppiamento al motore di persistenza (che per WCFDS è basato su EF4.x)

in pratica, è come usare entity framework a distanza con pro come le query che vengono convertite automaticamente in SQL sul proprio motore di DB

 

per avere un sistema robusto, però, è necessario avere anche transazioni, logiche di intercettazione delle operazioni con validazioni e logiche di business (del tipo modifiche aggiuntive, conversioni, etc),  e role-based authorization a tappeto, o riga-per-riga, magari tutte funzionanti in ottica IoC (facilmente convertibile in plugin)

tutte cose che se fatte in un WCF normale, sarebbero fonte di tante righe di codice, invece qui sono abbastanza semplici, ed ho predisposto un completo esempio di codice con tutte le funzionalità descritte:

 

  • SQL Express DataBase (App_Data)
  • EntityFramework 4.0 DB-First EDM (supports up to 4.3 code-first design)
  • IoC (inversion of control) / dependency injection execution pattern core engine
  • IoC /dependency injection based module for validation, row-filtering and business logic
  • Role/user based authorization with PrincipalPermission (Imperative/Declarative) checks for update/read
  • Row-filtering role/user based authorization enabled (with examples)
  • WCF Data Service (REST/OData HTTP/s)
  • DTC/LTM Transactions execution injection
  • Exception Bubling to DataService clients
  • T4 Templates for Data Service Extensions

 

DOWNLOAD DAL SITO MSDN

 

a presto

by Antonio Esposito on 3/11/2012