IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Exemple d'applications métier avec Silverlight 3 RTM et .NET RIA Services mise à jour de juillet

Partie 13 : Le nouveau projet librairie de classes

Date de publication : 08 janvier 2011.

Par Brad Adams
 Jérôme Lambert (Traduction) (Espace perso) (Blog)
 

Cet article est une traduction d'un des articles de la série "en Business Apps Example for Silverlight 3 RTM and .NET RIA Services July Update" de Brad Adams.

       Version PDF (Miroir)   Version hors-ligne (Miroir)
Viadeo Twitter Facebook Share on Google+        



I. Le nouveau projet librairie de classes


I. Le nouveau projet librairie de classes

Ceci a été une des plus longues séries d'articles sur mon blog que j'ai faite mais il y a tellement de quoi se mettre sous la dent ! Peut être que quelqu'un écrira un livre ou deux ? Peu importe, dans cet article, je voudrias passer un peu de temps à regarder la structure de projet que nous avons construite et voir si il y a a façon de l'améliorer un petit peu avec une séparation plus claire des préoccupations.

Pour ceux qui viennent juste nous rejoindre, voici encore des nouvelles de ma session en Mix09 "en building business applications with Silverlight 3". Vous pouvez regarder en la vidéo originale de la session complete.

  1. VS2008 SP1
  2. Silverlight 3 RTM
  3. .NET RIA Services July '09 Preview <--- N'est en réalité pas nécessaire pour cette démo ! Mais c'est néanmoins bien de le savoir ;-)
La structure du projet wue nous avons utilisé depuis le début est une simple solution avec deux projets dedans :

  • MyApp - L'application Silverlight
  • MyApp.Web - L'application Web
Le projet MyApp.Web a actuellement deux intérêts distincts.. Le premier est de maintenir la logique applicative de l'entièreté de l'application, le second sont les interfaces web et des services (plus précisément le rendu final de default.aspx, sitemap.aspx et SuperEmployeeService.svc). Deux buts dans le même projet a tendance à m'embêter à un certain niveau car je préfère une séparation plus propre pour une meilleure maintenance et un travail inter équipe. Heureusement, un nouveau projet librairie de classes pour RIA Services est disponible dans la mise à jour de juillet de RIA Services. Nous regarderons de plus prêt à la refactoriation du projet MyApp.Web pour sortir la partie logique applicative dans un projet séparé.

Faites un clique droit sur la solution et sélectionnez "Ajouter un nouveau projet..."

Cela va créer une paire de projets librairie de classes, une pour le client, une pour le serveur.

Tout d'abord, nous avons besoin d'ajouter une référence du projet MyApp.Web au projet SuperEmployeeRIAServicesLibrary.Web.. Nous allons vouloir accéder au DomainService défini dans la librairie à de nombreux endroits dans WebApp.

Maintenant, ajoutez simplement un modèle Entity Framework et SuperEmployeeDomainService au projet SuperEmployeeRIAServicesLibrary.Web exactement comme nous l'avions fait précédemment à l'article 2. Une fois que vous avez la classe SuperEmployeeDomainService créé, vous pouvez recopier les implémentations que nous avons donc faite précédemment...

Vous pouvez ensuite supprimer les classes des services Domain du projet MyApp.Web. Cela vous donne un très grand soucis de propreté..

Notez que SuperEmployeesRIAServicesLibrary.Web contient les classes du modèle de données et du Domain et le projet MyApp.Web a les pages asp.net et le service. Tout cela accède au DomainModel à partir du projet librairie de classes.

Notez que si vous utilisez "Business Application Template" comme moi, vous remarquerez un répertoire Services qui inclu quelques DomainServices pour fonctionner avec la gestion utilisateur. D'une certaine façon, je pense à ça comme un souci d'application à grande échelle, cela devrait donc avoir du sens de laisser cela dans le projet web, mais si vous voudriez les déplacer, pas de problème. Faites simplement les étapes suivantes :

  1. Déplacez l'entiereté directement dans le projet SuperEmployeeRIAServicesLibrary.Web. C'est surement un petit peu plus propre de mettre à jour les espaces de noms dans ces types, si vous faites ainsi, vous aurez besoin de mettre à jour les espaces de noms au niveau du client également.
  2. Retirez le "RIA Services Link" du client Silverlight au projet MyApp.Web dans les propriétés de MyApp.
  3. Ajoutez une référence de projet de MyApp à SuperEmployeesRIAServicesLibrary.
  4. Ajoutez une simple classe RIAContext à votre application.
  5. Reliez explicitement le AuthDomainContext dans App.xaml.cs avec les lignes 5 et 6.
public sealed partial class RiaContext : System.Windows.Ria.RiaContextBase
{
    partial void OnCreated();
 
    public RiaContext()
    {
        this.OnCreated();
    }
    public new static RiaContext Current
    {
        get
        {
            return ((RiaContext)(System.Windows.Ria.RiaContextBase.Current));
        }
    }
    
    public new User User
    {
        get
        {
            return ((User)(base.User));
        }
    }
}
1: private void Application_Startup(object sender, StartupEventArgs e)
2: {
3:     this.Resources.Add("RiaContext", RiaContext.Current);
4:  
5:     var auth = RiaContext.Current.Authentication as FormsAuthentication;
6:     auth.DomainContext = new AuthenticationContext();
7:     
8:     this.RootVisual = new MainPage();
9: }
Une fois encore, les étapes ci-dessus sont optionnelles - seulement si vous voulez exclure complètement le DomainService de votre application web.

Maintenant, nous avons juste besoin de mettre à jour les références d'espaces de noms au travers des clients Silverlight et web car notre classe DomainService est dans un nouvel espace de nom. Et "presto"! L'application fonctionne très bien, mais maintenant le projet est mieux factorisé pour une maintenance à long terme.

Remarquez que chaque élément de l'application reste fonctionnel...

L'application cliente..

La vue ASP.NET (pour SEO)..

Le service...

Et évidemment, le client WinForms pour ce service..



               Version PDF (Miroir)   Version hors-ligne (Miroir)

Valid XHTML 1.0 TransitionalValid CSS!

Copyright © 2011 Brad Abrams. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts. Droits de diffusion permanents accordés à Developpez LLC.