II. L'application d'étude▲
II-A. Présentation▲
Nous allons concevoir une application affichant une liste de films. Celle-ci sera très peu complexe afin de bien nous focaliser sur les problématiques de cet article.
Nous allons afficher tous les films et l'utilisateur pourra filtrer par année et par pays.
Il y aura donc avoir plusieurs couches :
- une couche d'accès aux données utilisant un stockage XML ;
- une couche d'accès aux données utilisant un stockage sur SQL via Entity Framework (non traité dans un premier temps) ;
- une couche de logique métier ;
- une couche de services pour exposer des webservices ;
- une couche de présentation console ;
- une couche de présentation en ASP.Net ;
- une couche de présentation en ASP.Net MVC3 ;
- une couche de présentation en Silverlight.
Comme vous pouvez le remarquer, nous avons deux couches d'accès aux données. Celles-ci ne sont pas destinées à être utilisées simultanément, mais nous permettront de voir l'unity dans ces deux cas de figure.
II-B. Les entités manipulées▲
Une petite parenthèse dans cette section pour parler des entités manipulées. Ici, nous avons uniquement la classe Movie, mais dans une vraie application elles sont beaucoup plus nombreuses. Dans une architecture par couches, plusieurs pratiques existent :
- partager les définitions de ceux-ci à travers toutes les couches (c'est ce que nous utiliserons) ;
- utiliser une définition par couche (permet par exemple de découpler l'objet Business de l'objet stocké en base ou l'objet Business de l'objet envoyé à la couche présentation ou service). C'est une méthodologie assez lourde à mettre en place.
Nous allons donc définir cette classe dans un projet transverse.
II-C. Le code source de l'application▲
Le code source de l'application originale, disposée en couches découplées est disponible à ce lien.
Nous allons le détailler un peu pour avoir des bases solides pour la suite.
II-D. La couche d'accès aux données en XML▲
La couche utilise Linq-To-XML pour lire et écrire nos données dans un fichier XML.
La couche est composée de deux projets : le projet MovieBase.DataAccess.Interfaces qui contient le contrat de la couche DataAccess et MovieBase.XmlDataAccess qui contient une implémentation.
II-E. La couche métier▲
Ici la couche business n'a que peu de responsabilités. Lors d'une requête d'affichage elle vérifie les arguments, à l'insertion d'un film elle vérifie les données.
La couche est composée de deux projets : le projet MovieBase.Business.Interfaces qui contient le contrat de la couche Business et MovieBase.Business qui contient une implémentation.
On peut noter que pour fonctionner, elle a besoin d'une instance d'une couche d'accès aux données. Cette instance est passée en paramètre au constructeur, ça n'est donc pas elle qui se préoccupe de l'instanciation.
II-F. La couche de présentation en console▲
L'application est vraiment basique. C'est une boucle infinie qui affiche à l'utilisateur un menu et qui traite ses choix.
On peut noter que pour fonctionner, elle a besoin d'une instance d'une couche business. C'est la couche présentation qui instancie donc la couche business, mais aussi la couche d'accès aux données puisqu'elle est nécessaire également (passée dans le constructeur de la couche business).
On remarque que la séparation en couche n'est pas tellement coûteuse en volume de code et permet de bien factoriser notre code.