2009-08-05 3 views
1

Je travaille avec une petite équipe. Nous avons plusieurs mécanismes de livraison, souvent pour les mêmes modèles d'affaires mais pour différentes expositions. Nous avons besoin d'aide pour nos modèles de partage de l'efficacité et de validation de nos applications. Quel est le meilleur mécanisme pour créer une validation cohérente de nos modèles, tant pour l'expérience utilisateur que pour la réutilisation du code sur Silverlight 3 (services non-RIA), ASP.net MVC et WPF?Modèles et validation dans plusieurs mécanismes de distribution de l'interface utilisateur

Nous sommes ouverts à l'utilisation de EF, NHibernate ou Linq à Sql pour nos modèles de domaine. La création de DTO et de présentation/affichage de modèles est également acceptable. La partie malheureuse est que la base de données est héritée et ne suit pas les bonnes conventions pour les clés.

Nous voudrions construire un ensemble unique de modèles, et des visiteurs de validation (validation simple) ou de ceux qui peuvent facilement être utilisés dans tous les mécanismes de livraison. Le modèle MVP ou MVVM semble attrayant ainsi que UpdateControls, mais j'ai été incapable de trouver un seul modèle qui semble fonctionner sur tous les mécanismes.

La suppression de ComponentModel de Silverlight 3 semble invalider la plupart des exemples sur le web.

Un conseil serait grandement apprécié.

Répondre

1

Eh bien, je voudrais op personnellement pour Plain Old ClR objets POCO pour le modèle d'affaires.

using System.ComponentModel.DataAnnotations; 

L'espace de noms ci-dessus apporte également la validation à vos objets. Il y a le bloc de validation d'application d'entreprise, mais je n'ai pas trouvé de moyen de l'intégrer dans le client Silverlight. Mais l'avantage est que vous pouvez créer votre modèle d'entreprise et décorer avec DataAnnotations, puis réutiliser ce modèle d'entreprise.

Il serait tout droit sorti de la boîte avec NHibernate, mais pas EF, car cela ne permet pas de POCO. Linq-to_Sql, je crois, mais vous auriez besoin soit d'utiliser des fichiers de mapping en utilisant SQL Metal ou des méta-données spécifiques de Linq-To_Sql.

L'un des problèmes, et non des problèmes, mais plutôt des scénarios que j'ai rencontrés est que j'utilise WCF pour communiquer entre Silverlight et le serveur. Cela vous donne une base de code générée pour le service, et en modifiant cela signifie que toutes les modifications seront perdues lors de la prochaine mise à jour du service. L'utilisation de MetaDataType est quelque chose que j'aimerais aussi voir disponible dans Silverlight car cela signifie que vous pouvez décorer les classes générées sans risque de perdre votre travail lors de la régénération. Si vous travaillez .NET vers .NET sur le WCF vous gagnez bien plus de fonctionnalités mais si vous avez besoin que la validation et le retour des erreurs soient interopérables, j'ai une classe de réponse de base qui contient des propriétés HasErrors et Error [] . Je fais actuellement les suivantes:

Silverlight: - Generated service WCF Proxy - Un ViewModel qui enveloppe les classes de service proxy interceptant les setters et getters - Appliquer la validation côté client à l'aide du System.ComponentModel.DataAnnotations

Business Model: - J'utilise POCO avec NHibernate - J'utilise la validation des applications d'entreprise Bloc - J'ai une base de classe Domaine avec propriétés hasErrors et erreurs

WCF: - Je suis à l'aide DTO à l'aide d'une demande et la réponse à savoir

AddClientResponse AddClient(AddClientRequest request) 

Silverlight utilise le service WCF tout en services WCF consomme un dépôt qui utilise la couche d'affaires et d'accès aux données. Avec ce qui précède, je peux déployer avec un client flex, par exemple, et si je ne gère pas la validation de données du côté du client Flex, le client recevra toujours des erreurs dans la classe de réponse de base. Il doit ensuite effectuer une validation côté client ou gérer les erreurs renvoyées par le serveur. Côté client ofcourse enregistre le roundtrip.

[DataContract] 
public class BaseResponse 
{ 
    [DataMember] 
    public Error[] Errors { get; set; } 
    [DataMember] 
    public Boolean HasErrors { get; set; } 
} 

Espérons que cela aide!

Je suis sur la quête du savoir moi-même comme toujours lol :-)

Andrew

+0

Merci pour la réponse. J'ai commencé le chemin des annotations dans la version bêta, mais pour une raison quelconque, il a été retiré de la version. J'espère que la version des services de RIA remettra ça. J'étais curieux de savoir ce que les gens font en attendant. Il semble également que la version 2 de MVC va aussi le chemin des annotations via les classes Meta helper. La validation côté service est facile via les nombreuses options disponibles. Le côté client (c'est-à-dire dès qu'ils sont désactivés) semble être un processus manuel en ce moment pour toutes les options d'interface utilisateur. Le framework xVal semble cependant aider avec MVC. –

Questions connexes