Industrialiser le dveloppement avec Silverlight 4 et RIA

  • Slides: 43
Download presentation

Industrialiser le développement avec Silverlight 4 et RIA Services Mercredi 9 Février Jean-Luc Boucho

Industrialiser le développement avec Silverlight 4 et RIA Services Mercredi 9 Février Jean-Luc Boucho Architecte Solutions Winwise Arnaud Auroux Consultant Access it IDF 2

L’expert de référence ! Société d’expertise sur les technologies Microsoft Partenaire historique et stratégique

L’expert de référence ! Société d’expertise sur les technologies Microsoft Partenaire historique et stratégique de Microsoft Plus de 90 collaborateurs certifiés interviennent sur des missions à forte valeur ajoutée : Missions d’expertise Conseil & Audit Réalisation de projets à engagement de résultats Une offre couvrant l’ensemble du cycle de vie des applications : Travail collaboratif, portail d’entreprise et Workflow Business Intelligence & Data Management Interfaces utilisateurs, Rich Internet Application & desktop application Architecture d’entreprise et Architecture Life cycle Management Infrastructure, Sécurité et Réseaux Centre de formation et de Certification Microsoft WINWISE est le pôle d’expertise MICROSOFT du Groupe ALTEN et bénéficie de la puissance financière d’un leader incontesté WINWISE 130/136 Rue de Silly 92100 Boulogne-Billancourt www. winwise. com 3

Access It Id. F en quelques mots… • • • Société de services, conseil

Access It Id. F en quelques mots… • • • Société de services, conseil / expertise, et formation, exclusivement sur les technologies Microsoft 20+ collaborateurs spécialisés sur les techno MS, dont 11 MVP Interventions en mode : ü Conseil, expertise, coaching et formation ü Réalisation, au forfait ou en Assistance Technique. NET Plateforme Applicative Framework et langages. Net, AZURE, Silverlight, WPF/Surface, VS/TFS, Windows Phone 7, … SQL Server (SSIS, SQL, SSAS, SSRS), Power. Pivot, Share. Point & on-line, Office 365, … . NET Collab. BI 4

Agenda Présentation WCF RIA Services Développement rapide d’applications Industrialisation Patterns Persistance, Domaine, Opérations Approche

Agenda Présentation WCF RIA Services Développement rapide d’applications Industrialisation Patterns Persistance, Domaine, Opérations Approche MVVM Authentification et autorisation Testabilité 5

Problématiques RIA Service Application cliente Couche de présentation Couche métier Coût de mise en

Problématiques RIA Service Application cliente Couche de présentation Couche métier Coût de mise en place important Autorisations Accès concurrentiels Duplication de la logique métier 6 Couche d’accès aux données Base de données

WCF RIA Services Simplifier la communication afin que le métier devienne le centre d’intérêt.

WCF RIA Services Simplifier la communication afin que le métier devienne le centre d’intérêt. RIA Couche de présentation Couche métier Couche d’accès aux données Notion de domaine : opérations + entités + validations Côté client Contrôles spécifiques Contexte de donnée « Tracking » d’objets Côté serveur WCF Validations Accès aux données Sécurité 7 Base de données

Démo WCF RIA Services 8

Démo WCF RIA Services 8

Développement rapide d’applications Serveur Création du modèle d’entité Création du Domain Service Création des

Développement rapide d’applications Serveur Création du modèle d’entité Création du Domain Service Création des requêtes Ajout des métadonnées Dépendance à la technologie de persistance des données Client Utilisation du Domain. Context Utilisation des requêtes générées Rigidité de la structure 9 Data. Binding Submit. Changes

Industrialisation « Déployer des pratiques pour améliorer la productivité et la robustesse des applications

Industrialisation « Déployer des pratiques pour améliorer la productivité et la robustesse des applications tout en restant dans des délais et des coûts maîtrisés » Séparer les responsabilités 10

Patterns d’industrialisation Repository Unit Of Work Dependency Injection MVVM (Model View-Model) Unit Testing …et

Patterns d’industrialisation Repository Unit Of Work Dependency Injection MVVM (Model View-Model) Unit Testing …et aussi : AOP (Aspect-Oriented Programming) 11

Industrialiser la persistance Principes Isoler la persistance dans un repository pour la découpler du

Industrialiser la persistance Principes Isoler la persistance dans un repository pour la découpler du service de domaine Accès au repository via une interface IRepository Générique, supportant les opérations CRUD standards pour accélérer le développement Extensible, pour définir des opérations spécifiques supplémentaires Un repository : Linq. To. Entities. Repository<TContext> pour supporter Entity. Framework (TContext correspond au modèle) Domaine Entité IRepository Métier Implémentation de la persistance (Linq. To. Entities…) 12 Data Source

Industrialiser la persistance IRepository, Linq. To. Entities. Repository<TContext> new Linq. To. Entities. Repository<Northwind. Entities>();

Industrialiser la persistance IRepository, Linq. To. Entities. Repository<TContext> new Linq. To. Entities. Repository<Northwind. Entities>();

Démo Industrialiser la persistance 14

Démo Industrialiser la persistance 14

Industrialiser le domaine Principes Définir une classe de base : Repository. Domain. Service pour

Industrialiser le domaine Principes Définir une classe de base : Repository. Domain. Service pour Accéder au IRepository depuis le domaine Bénéficier des opérations standard (CRUD) Valider les lots de modifications (Transaction) Redéfinir si nécessaire les opérations dans le domaine Entité Domaine Présentation Métier Entité Métier 15 Repository

Industrialiser le domaine Repository. Domain. Service

Industrialiser le domaine Repository. Domain. Service

Industrialiser le domaine Northwind. Service Entity. Domain. Service. Description. Provider : description du modèle

Industrialiser le domaine Northwind. Service Entity. Domain. Service. Description. Provider : description du modèle Entity. Domain : opérations CRUD autorisées pour chaque entité IRepository : persistance du modèle [Enable. Client. Access()] [Entity. Domain. Service. Description. Provider(typeof(Northwind. Entities))] [Entity. Domain(typeof(Customers), Entity. Domain. Operations. All)] [Entity. Domain(typeof(Regions), Entity. Domain. Operations. Query)]. . . public class Northwind. Service : Repository. Domain. Service { public void Delete. Customers(Customers customer) { base. Repository. Delete<Customers>(customer); } }

Industrialiser le domaine Instanciation du service de domaine Par défaut, le service est instanciée

Industrialiser le domaine Instanciation du service de domaine Par défaut, le service est instanciée par RIA Services C’est insuffisant : il faut configurer le repository à utiliser Solution : Extensibilité du Domain. Service. Factory Unity pour injecter le service de domaine dans RIA Services 18

Industrialiser le domaine Application Web Northwind (Global. asax. cs) protected void Application_Start(object sender, Event.

Industrialiser le domaine Application Web Northwind (Global. asax. cs) protected void Application_Start(object sender, Event. Args e) { Unity. Helper. Unity. Container. Register. Type<Northwind. Service>( new Injection. Property("Repository", typeof(Linq. To. Entities. Repository<Northwind. Entities>))); Domain. Service. Factory = new Domain. Service. Factory(); } Domain. Service. Factory public class Domain. Service. Factory : IDomain. Service. Factory { public Domain. Service Create. Domain. Service( Type domain. Service. Type, Domain. Service. Context context) { Domain. Service domain. Service = Unity. Helper. Unity. Container . Resolve(domain. Service. Type) as Domain. Service; domain. Service. Initialize(context); return domain. Service; }

Démo Industrialiser le domaine 20

Démo Industrialiser le domaine 20

Gestion des opérations

Gestion des opérations

Gestion des opérations Implémentation Entity. Framework

Gestion des opérations Implémentation Entity. Framework

Démo Gestion des opérations 23

Démo Gestion des opérations 23

Du service vers le client Domain. Service Description. Provider Invocation des opérations Domaine. Context.

Du service vers le client Domain. Service Description. Provider Invocation des opérations Domaine. Context. Load(Entity. Query) Get. Description Domaine. Context. Submit. Changes … Domain. Service Description Get. Invoke. Operation … Génération du contexte client … public sealed partial class Northwind. Context : Domain. Context { … } … 24

Approche MVVM VIEWMODEL Controls Commandes Données Layout Opérations Règles métier Actions Propriétés Triggers Data.

Approche MVVM VIEWMODEL Controls Commandes Données Layout Opérations Règles métier Actions Propriétés Triggers Data. Bindings 25

Approche MVVM RIA Services 1. 0 VIEW Controls VIEWMODEL Domain. Context Entity. Sets Layout

Approche MVVM RIA Services 1. 0 VIEW Controls VIEWMODEL Domain. Context Entity. Sets Layout Actions Commandes Triggers Opérations Data. Bindings MODEL Entités Validateurs Proxy généré 26 DOMAINSERVICE Domain. Operations

Approche MVVM SP 1 beta VIEW Controls VIEWMODEL Data. Service Domain. Context Entity. Sets

Approche MVVM SP 1 beta VIEW Controls VIEWMODEL Data. Service Domain. Context Entity. Sets Commandes Layout Opérations Actions Get. Data Persit. Data Entity. List Propriétés Triggers Data. Bindings MODEL Entités Validateurs Proxy généré 27 DOMAIN SERVICE

Démo Approche MVVM 28

Démo Approche MVVM 28

Sécurité - Serveur Classe Authentication. Base et attribut Require. Authentication Attribut Require. Role Infrastructure

Sécurité - Serveur Classe Authentication. Base et attribut Require. Authentication Attribut Require. Role Infrastructure ASP. NET Intégration au processus « Query / Submit » 29

Sécurité - Serveur RIA Services fournit un service remplissant toutes les fonctionnalités d’authentification [Enable.

Sécurité - Serveur RIA Services fournit un service remplissant toutes les fonctionnalités d’authentification [Enable. Client. Access] public class Authentication. Service : Authentication. Base<User> { } Le paramétrage de la sécurité s’effectue de manière classique dans le fichier Web. config <role. Manager enabled="true" /> <authentication mode="Forms" > <forms name=". Simple. RIA_ASPXAUTH" /> </authentication>. . .

Sécurité - Serveur Pour les opérations implémentées dans le domaine par codage, utiliser les

Sécurité - Serveur Pour les opérations implémentées dans le domaine par codage, utiliser les attributs RIA Services : [Requires. Authentication] [Requires. Role("Admin")] Pour les opérations CRUD standards, utiliser l’attribut Entity. Domain. Attribute : [Entity. Domain(typeof(Customers), Operations = Entity. Domain. Operations. All, Requires. Authentication = Entity. Domain. Operations. All, Query. Requires. Role = new []{"Std. User"}, Insert. Requires. Role = new []{"Admin"}, Update. Requires. Role = new []{"Admin"}, Delete. Requires. Role = new []{"Admin"}) ]

Sécurité - Client Classe Web. Authentication. Service Point d’entrée du processus d’authentification. Classe Forms.

Sécurité - Client Classe Web. Authentication. Service Point d’entrée du processus d’authentification. Classe Forms. Authentication et Windows. Authentication Processus d’authentification spécialisés. Classe Authentication. Domain. Context. Base Accès client au service d’authentification. Interfaces IIdentity et IPrincipal Visibility, pattern ICommand 32

Sécurité - Client Utilisation dans un View. Model Propriété Command (Can. Execute) public bool

Sécurité - Client Utilisation dans un View. Model Propriété Command (Can. Execute) public bool Can. Delete. Customer { get { return this. Domain. Auth. Service . Can. Delete. Customer; } } ICommand delete. Customer. Command = new Relay. Command<Customer>( this. Delete. Customer, c => this. Can. Delete. Customer )); Service dédié public class Domain. Auth. Service { public bool Can. Delete. Customer { get { return Web. Context. Current. User. Is. In. Role("Admin"); } } }

Sécurité - Client Inclure au contexte les règles définies côté service Code. Generator. Text.

Sécurité - Client Inclure au contexte les règles définies côté service Code. Generator. Text. Template (toolkit sp 1) [Domain. Service. Client. Code. Generator(typeof(Code. Generator), "C#")] public class Code. Generator : CSharp. Client. Code. Generator { protected override Domain. Context. Generator { get { Génération personnalisée return new Authorization. Code. Generator(); du Domain. Context client } } } Gestion déclarative (pour les cas particuliers) Authorization. Samples (http: //code. msdn. microsoft. com/Ria. Services) <Button s: Authorization. Requires. Role="Admin, Customer. Manager"/>

Démo Sécurité 35

Démo Sécurité 35

Testabilité Domain. Service Implémentation d’un repository de base pour les tests Définition d’un repository

Testabilité Domain. Service Implémentation d’un repository de base pour les tests Définition d’un repository spécifique à chaque contexte. Configuration du conteneur IOC pour l’utilisation du repository spécifique de test.

Démo Testabilité – Domain. Service 37

Démo Testabilité – Domain. Service 37

Testabilité Domain. Context Implémentation d’un Domain. Client de base pour les tests. Définition d’un

Testabilité Domain. Context Implémentation d’un Domain. Client de base pour les tests. Définition d’un Domain. Client spécifique à chaque contexte. Configuration du conteneur IOC pour l’utilisation du Domain. Client spécifique de test.

Démo Testabilité – Domain. Context 39

Démo Testabilité – Domain. Context 39

Conclusion RIA Services Adaptée au model RAD. Souple Extensible Donc adaptée aux applications d’entreprise

Conclusion RIA Services Adaptée au model RAD. Souple Extensible Donc adaptée aux applications d’entreprise Téléchargez et utilisez notre framework http: //rialternative. codeplex. com/ 40

Références Téléchargements http: //www. silverlight. net/getstarted/riaservices/ WCF Ria Services Code Gallery http: //code. msdn.

Références Téléchargements http: //www. silverlight. net/getstarted/riaservices/ WCF Ria Services Code Gallery http: //code. msdn. microsoft. com/Ria. Services Kyle Mc. Clellan http: //blogs. msdn. com/b/kylemc/ Colin Blair http: //www. riaservicesblog. net/Blog/ Jeff Handley http: //jeffhandley. com/ Brad Abrams http: //blogs. msdn. com/b/brada/ 41

MSDN et Tech. Net : l’essentiel des ressources techniques à portée de clic Portail

MSDN et Tech. Net : l’essentiel des ressources techniques à portée de clic Portail administration et infrastructure pour informaticiens Portail de ressources technique pour développeurs http: //technet. com http: //msdn. com 42