Traduction▲
Cet article est la traduction la plus fidèle possible de l'article original de Brad Abrams, Business Apps Example for Silverlight 3 RTM and .NET RIA Services July Update: Part 13: The New Class Library Project.
Le nouveau projet librairie de classes▲
Ceci a été une des plus longues séries d'articles sur mon blog que j'ai faites, 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 voudrais passer un peu de temps à regarder la structure de projet que nous avons construite et voir s’il y 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 Mix09 « building business applications with Silverlight 3 ». Vous pouvez regarder la vidéo originale de la session complète.
- VS2008 SP1
- Silverlight 3 RTM
- .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 est 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ès à la refactoriation du projet MyApp.Web pour sortir la partie logique applicative dans un projet séparé.
Faites un clic 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éée, vous pouvez recopier les implémentations que nous avons donc faites précédemment…
Vous pouvez ensuite supprimer les classes des services Domain du projet MyApp.Web. Cela vous donne un très grand souci 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 inclus 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 vouliez les déplacer, pas de problème. Faites simplement les étapes suivantes :
- Déplacez l'entièreté 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.
- Retirez le « RIA Services Link » du client Silverlight au projet MyApp.Web dans les propriétés de MyApp.
- Ajoutez une référence de projet de MyApp à SuperEmployeesRIAServicesLibrary.
- Ajoutez une simple classe RIAContext à votre application.
- 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.
Conclusion▲
Cet article conclut la partie sur les sources de données basées sur WCF. La quatorzième partie de cette série d'articles sera consacrée au support de Visual Basic (VB) et de WPF.
Remerciements▲
Je tiens ici à remercier Brad Abrams de nous avoir autorisés à traduire son article.