430 likes | 567 Views
Industrialiser le développement avec Silverlight 4 et RIA Services. Mercred i 9 Février Jean-Luc Boucho Architecte Solutions Winwise. Arnaud Auroux Consultant Access it IDF. L’expert de référence !. Société d’expertise sur les technologies Microsoft
E N D
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
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
Access It IdFen 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), PowerPivot, SharePoint & on-line, Office 365,… .NET Collab. BI
Agenda Présentation WCF RIA Services Développement rapide d’applications Industrialisation Patterns Persistance, Domaine, Opérations Approche MVVM Authentification et autorisation Testabilité
Problématiques RIA Service Application cliente Couche de présentation Couche métier Couche métier Couche d’accès aux données Base de données • Coût de mise en place important • Autorisations • Accès concurrentiels • Duplication de la logique métier
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 Base de 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é
Démo WCF RIA Services
Développement rapide d’applications Dépendance à la technologie de persistance des données Rigidité de la structure
« 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 » Industrialisation Séparer les responsabilités
Patterns d’industrialisation • Repository • Unit Of Work • Dependency Injection • MVVM (Model ViewView-Model) • Unit Testing • …et aussi : AOP (Aspect-OrientedProgramming)
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 : LinqToEntitiesRepository<TContext> pour supporter EntityFramework(TContext correspond au modèle) IRepository Data Source Domaine Implémentation de la persistance (LinqToEntities…) Entité Métier
Industrialiser la persistance IRepository, LinqToEntitiesRepository<TContext> newLinqToEntitiesRepository<NorthwindEntities>();
Démo Industrialiser la persistance
Industrialiser le domaine • Principes • Définir une classe de base : RepositoryDomainService 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 Repository Présentation Domaine Entité Métier Entité Métier
Industrialiser le domaine • RepositoryDomainService
Industrialiser le domaine • NorthwindService • EntityDomainServiceDescriptionProvider: description du modèle • EntityDomain : opérations CRUD autorisées pour chaque entité • IRepository : persistance du modèle [EnableClientAccess()] [EntityDomainServiceDescriptionProvider(typeof(NorthwindEntities))] [EntityDomain(typeof(Customers), EntityDomainOperations.All)] [EntityDomain(typeof(Regions), EntityDomainOperations.Query)] ... publicclassNorthwindService: RepositoryDomainService { public voidDeleteCustomers(Customerscustomer) { 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 DomainServiceFactory • Unity pour injecter le service de domaine dans RIA Services
Industrialiser le domaine • Application Web Northwind (Global.asax.cs) protectedvoidApplication_Start(object sender, EventArgs e) { UnityHelper.UnityContainer.RegisterType<NorthwindService>( newInjectionProperty("Repository", typeof(LinqToEntitiesRepository<NorthwindEntities>))); DomainService.Factory= newDomainServiceFactory(); } • DomainServiceFactory public class DomainServiceFactory : IDomainServiceFactory { publicDomainServiceCreateDomainService( TypedomainServiceType, DomainServiceContextcontext) { DomainServicedomainService = UnityHelper.UnityContainer .Resolve(domainServiceType) asDomainService; domainService.Initialize(context); returndomainService; }
Démo Industrialiser le domaine
Gestion des opérations Implémentation EntityFramework
Démo Gestion des opérations
Du service vers le client • DomainService • DescriptionProvider • GetDescription • … Invocation des opérations DomaineContext.Load(EntityQuery) DomaineContext.SubmitChanges DomainService Description GetInvokeOperation … Génération du contexte client … public sealed partial class NorthwindContext : DomainContext{ … } …
Approche MVVM VIEW Controls Layout Actions Triggers DataBindings VIEWMODEL Commandes Opérations Propriétés MODEL Données Règles métier
Approche MVVM RIA Services 1.0 VIEW Controls Layout Actions Triggers DataBindings VIEWMODEL Commandes Opérations DOMAINSERVICE DomainOperations DomainContext EntitySets MODEL Entités Validateurs Proxy généré
Approche MVVM SP1 beta VIEW Controls Layout Actions Triggers DataBindings DOMAIN SERVICE DataService GetData PersitData EntityList VIEWMODEL Commandes Opérations Propriétés DomainContext EntitySets MODEL Entités Validateurs Proxy généré
Démo Approche MVVM
Sécurité - Serveur • Classe AuthenticationBaseet attribut RequireAuthentication • Attribut RequireRole • Infrastructure ASP.NET • Intégration au processus « Query / Submit »
Sécurité - Serveur • RIA Services fournit un service remplissant toutes les fonctionnalités d’authentification • Le paramétrage de la sécurité s’effectue de manière classique dans le fichier Web.config [EnableClientAccess] public class AuthenticationService : AuthenticationBase<User> { } <roleManagerenabled="true" /> <authentication mode="Forms" > <formsname=".SimpleRIA_ASPXAUTH" /> </authentication> ...
Sécurité - Serveur • Pour les opérations implémentées dans le domaine par codage, utiliser les attributs RIA Services: • Pour les opérations CRUD standards, utiliser l’attribut EntityDomainAttribute : [RequiresAuthentication] [RequiresRole("Admin")] [EntityDomain(typeof(Customers), Operations = EntityDomainOperations.All, RequiresAuthentication= EntityDomainOperations.All, QueryRequiresRole= new []{"StdUser"}, InsertRequiresRole = new []{"Admin"}, UpdateRequiresRole = new []{"Admin"}, DeleteRequiresRole = new []{"Admin"}) ]
Sécurité - Client • Classe WebAuthenticationService • Point d’entrée du processus d’authentification. • ClasseFormsAuthentication et WindowsAuthentication • Processus d’authentification spécialisés. • Classe AuthenticationDomainContextBase • Accès client au service d’authentification. • Interfaces IIdentity et IPrincipal • Visibility, pattern ICommand
Sécurité - Client Utilisation dans un ViewModel Propriété publicboolCanDeleteCustomer{ get {returnthis.DomainAuthService .CanDeleteCustomer; }} Command (CanExecute) ICommanddeleteCustomerCommand=newRelayCommand<Customer>( this.DeleteCustomer,c=>this.CanDeleteCustomer )); Service dédié publicclassDomainAuthService{publicboolCanDeleteCustomer {get {returnWebContext.Current.User.IsInRole("Admin"); } }}
Sécurité - Client • Inclure au contexte les règles définies côté service • CodeGeneratorTextTemplate (toolkit sp1) • [DomainServiceClientCodeGenerator(typeof(CodeGenerator), "C#")]publicclassCodeGenerator : CSharpClientCodeGenerator{protectedoverrideDomainContextGeneratorDomainContextGenerator {get {returnnewAuthorizationCodeGenerator(); } }} Génération personnalisée du DomainContext client • Gestion déclarative (pour les cas particuliers) • AuthorizationSamples(http://code.msdn.microsoft.com/RiaServices) • <Button s:Authorization.RequiresRole="Admin,CustomerManager"/>
Démo Sécurité
Testabilité • DomainService • 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é – DomainService
Testabilité • DomainContext • Implémentation d’un DomainClient de base pour les tests. • Définition d’un DomainClient spécifique à chaque contexte. • Configuration du conteneur IOC pour l’utilisation du DomainClient spécifique de test.
Démo Testabilité – DomainContext
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/
Références • Téléchargements • http://www.silverlight.net/getstarted/riaservices/ • WCF Ria Services Code Gallery • http://code.msdn.microsoft.com/RiaServices • Kyle McClellan • 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/
MSDN et TechNet: 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