Architecturer des applications métier Silverlight


précédentsommairesuivant

Partie 4 - Métadonnées et localisation

La spécification des métadonnées pour nos entités est la partie la plus facile et c'est un bon endroit pour commencer la localisation de notre application.

La première des choses que nous avons à faire est de créer une classe de métadonnées telle que décrite dans l'exemple suivant :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
[MetadataType(typeof(Customer.CustomerMetadata))]
public partial class Customer
{
 internal class CustomerMetadata
 {
 [Display(ResourceType = typeof(Metadata), Name = "MyApp_Customer_Number")]
 public int Number;

 [Display(ResourceType = typeof(Metadata), Name = "CommonProperties_Email")]
 public string Email;

 [Include]
 public EntityCollection<Order> Orders;
 }
}
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
[MetadataType(typeof(Employee.EmployeeMetadata))]
public partial class Employee
{
    internal class EmployeeMetadata
    {
        [Display(ResourceType = typeof(Metadata), Name = "CommonProperties_Name")]
        [StringLength(128, ErrorMessageResourceType = typeof(Metadata), ErrorMessageResourceName = "CommonErrors_StringLength")]
        public string Name;

        [Display(ResourceType = typeof(Metadata), Name = "CommonProperties_Email")]
        public string Email;

        [Include]
        public Department Department;
    }
}

L'attribut DisplayAttribute est très utile, car il annote les propriétés avec des informations qui peuvent être consommées de différentes manières. Par exemple, lorsque vous utilisez votre entité dans une datagrid, les entêtes des cellules vont automatiquement chercher DisplayAttribute et extraire la chaîne localisée pour cette propriété. La même chose s'applique pour les labels dans une dataform et si vous voulez créer votre propre framework d'interface utilisateur, vous pouvez exploiter ce type d'annotation pour commencer la localisation de votre application. Remarquez comment j'ai réutilisé des noms de ressources pour les propriétés communes comme Email. La même chose aurait pu être faite pour Number et Name, mais cela dépend vraiment de chaque cas.

Vous pouvez également placer les règles de validation sur vos propriétés en utilisant des attributs comme StringLength, appliquer des expressions régulières ou même créer vos propres règles de validation personnalisées. Le plus intéressant ici étant que ces règles seront également disponibles côté client. Le DomainService fait en sorte qu'avant l'exécution des opérations sur les entités, toutes les règles de validation sont appliquées. Notez que vous ne pouvez pas faire toutes sortes de validation sur vos entités en utilisant des métadonnées. Certaines validations peuvent nécessiter la connexion à une base de données, transactions, etc., et cette information n'est pas disponible dans ce type de contexte de validation. Je recommande que de telles validations soient effectuées après l'appel à la méthode ExecuteChangeSet du DomainService et juste avant la méthode PersistChangeSet.

Plus de détails sur la spécification des métadonnées peuvent être trouvés dans la documentation ou d'autres ressources sur la toile. Je veux simplement mettre l'accent sur un aspect différent sur lequel peu de gens ont tendance à écrire. C'est le partage des ressources entre le client et le serveur. Le projet client ne compilera pas si les métadonnées ResourceManager ne sont pas disponibles. Comme elles sont définies sur le serveur, vous devez suivre ces étapes afin de les activer sur le client :

  • ajoutez les fichiers de ressources en tant que lien dans le projet client ;
  • modifiez l'espace de noms par défaut de votre projet client au même espace de noms qui est défini dans le projet serveur qui contient les fichiers de ressources ;
  • modifiez le .csproj du projet client là où il fait référence au fichier lié Designer.cs et ajoutez ces lignes de code :
 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
       <Compile Include="..\..\..\Server\Data\MyApp.Data\Resources\Metadata.Designer.cs">

              <AutoGen>True</AutoGen>      <Link>Resources\Metadata.Designer.cs</Link>

              <DesignTime>True</DesignTime>

              <DependentUpon>Metadata.resx</DependentUpon>

        </Compile>
  • assurez-vous que les fichiers de ressources ont le même chemin relatif dans le projet client que dans le projet serveur. Dans ce cas, j'ai créé un dossier Resources dans les deux projets.
  • assurez-vous également que le fichier de ressources a marqué son modificateur d'accès comme public.

Ces étapes sont nécessaires, car l'ajout de fichiers liés pour les fichiers dépendants, tels que Medatata.resx / Metadata.Designer.cs ne va pas automatiquement les marquer comme dépendants, vous devez donc le faire manuellement.

Maintenant, vous devriez être en mesure de compiler votre application et commencer à tirer profit des métadonnées dans vos entités.

Conclusion

Dans la prochaine partie, nous aborderons le développement client.


précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2013 Manuel Felicio. 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.