Bonjour,

Je suis actuellement sur l'étude d'un projet où les données de la base seront accessibles de plusieurs manières, via une appli. web (multilingue), une appli. winform (wpf, juste FR) et un service qui tournera chaque heure pour faire des stats. Du coup, je me suis lancé sur quelques tests notamment la création d'un projet web ASP.NET MVC3 dans VS2010 mais en déportant le model dans une dll.

Je pensais définir une structure de base simple avec les couches suivantes :

- Une couche Data encapsulée dans une dll : MyProject.Data.dll
Contenant mes classes POCO et ma classe Context permettant d'accéder à la base (classes générées via C# POCO Generator). Ces classes étaient dans le dossier Models du projet ASP.NET MVC3.

- Une couche Core encapsulée dans une dll : MyProject.Core.dll
Contenant mes classes métier effectuant tous les traitements et accès à la base (en passant par les objets de la couche Data).

- Une couche Resources encapsulée dans une dll : MyProject.Resources.dll
Contenant des fichiers ressources avec l'ensemble des libellés pour chaque langue utilisée dans les appli.

Ensuite dans l'idée, les appli web/winform ou services windows n'auraient qu'à faire appelle à ces dll et donc n'effectuer que très peu de traitement. Mais durant mes tests sur le projet ASP.NET MVC3, j'ai vu qu'il n'était pas possible d'ajouter des MetaData aux classes POCO en dehors de la dll "MyProject.Data.dll".

Voici un exemple de ce que j'ai voulu faire :

- Dans MyProject.Data.dll :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
// Déclaration de la classe POCO
public partial class MyClassPoco { /* ... */ }
- Dans MyProject.Core.dll :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
// Association de la classe POCO avec une Metadata
[MetadataType(typeof(MyClassPocoMetaData))]
public partial class MyClassPoco { }
 
// Déclaration de la classe MetaData
public partial class MyClassPocoMetaData
{
    // Ajout de l'attribut Required et StringLength
    [Required]
    [StringLength(128)]
    public string MyDescription { get; set; }
}
- Dans le projet ASP.NET MVC3 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
// Déclaration de la classe MetaData
public partial class MyClassPocoMetaData
{
    // Ajout de l'attribut Display
    [Display(Name = "Description", ShortName = "Desc", Description = "Description de la propriété")]
    public string MyDescription { get; set; }
}
Est-ce mon utilisation des MetaData qui n'est pas bonne ?
Est-ce mon découpage en différente couche qui ne va pas ?
Je pensais que c'était une manière propre mais j'ai l'impression d'avoir fait n'importe quoi...