Industrialiser le dveloppement avec Silverlight 4 et RIA
- Slides: 43
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 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 / 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 MVVM Authentification et autorisation Testabilité 5
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. 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é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 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 aussi : AOP (Aspect-Oriented Programming) 11
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>();
Démo Industrialiser la persistance 14
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 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 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. 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
Gestion des opérations
Gestion des opérations Implémentation Entity. Framework
Démo Gestion des opérations 23
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. Bindings 25
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 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
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. 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 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. 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 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. 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
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
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
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. 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 administration et infrastructure pour informaticiens Portail de ressources technique pour développeurs http: //technet. com http: //msdn. com 42
- Dveloppement durable
- Avec vous toujours avec vous
- Wojciech poniatowski
- Microsoft windows office rajesh
- Silverlight edge
- Silverlight toolkit
- Silverlight app migration
- Silverlight downloader
- Silverlight toolkit
- Ria slides
- Ms. ria julien
- Ria ellwanger wikipedia
- Ria turkey
- Ria madan
- Ria slides
- éxtasiado
- Ria slides
- Kees jonkheer
- Ria risk assessment
- Ria web services
- Rias diabetes
- Moodle ria formosa
- Ria rodrguez
- Aregnet
- Nephelometry
- Insulin ria
- Lettre écrite en 2070 compte rendu
- Ria sweden
- Open ria
- Ria thompson
- Ria slides
- Ria slides
- Ria slides
- Ria mpc
- Ria methodology
- Ria medicina
- Ria ellwanger wikipedia
- Ria slides
- Wcf ria services
- Ria ia csa
- Dr ria
- Ressurreição mel gibson
- Ria slides
- Ria slides