2009-05-26 4 views
3

J'étudie Nhibernate, jquery et WCF en même temps pour un projet interne, et je me demandais pourquoi je ne pouvais pas avoir des classes de données "propres". D'après ce que j'ai lu, un très bon point dans le monde nhibernate est que ma classe affaires ne sera pas liée au framework. Je ne veux pasWCF et Fluent NHibernate: comment puis-je garder des classes "propres"?

<SaveInTable("Thingie")> _ 
Public Class Thingie 
    <ColumnName("ThingieId")> _ 
    Public Property Id as Integer 
    ' accessors 
End Class 

mais plutôt quelque chose comme

Public Class Thingie 
Public Property Id as Integer 
' etc 

Et puis

Public Class ThingieMapping 
Inherits ClassMap(Of Thingie) 
' etc, omitted for brevity's sake 

Ce que je ne comprends pas est que si je veux la liste Thingie s dans une page Web avec jQuery, et si je veux utiliser les services Web WCF avec jquery (il ressemble à la cur tendance de loyer de ce que j'ai vu sur divers tutoriels), je me trouve avoir à ajouter DataContract et DataMember attributs à mon Thingie classe. D'autre part, les services Web ASMX classiques ne me dérangeront pas et me laisseront récupérer la classe Thingie sans se soucier d'ajouter des attributs. J'ai le sentiment qu'il me manque une partie de l'image ici; il semble logique d'essayer de garder la classe Thingie principalement indépendante, mais je n'ai pas trouvé d'exemples jusqu'à présent.

Alors, dois-je abandonner tous mes espoirs et m'en tenir aux webservices classiques, ou y a-t-il un moyen d'avoir mon gâteau WCF et de le manger aussi?

+0

En fait, j'ai parlé un peu plus tôt hier quand j'ai dit que les services web classiques fonctionnaient. Je n'avais tout simplement pas implémenté de méthodes avec IList et les collections génériques. En fait, si je voulais utiliser les services web, je devrais exclure les collections de la sérialisation, ce qui, en quelque sorte, vient à l'encontre de l'idée d'une classe propre. – samy

Répondre

3

Je vous suggère d'utiliser des DTO pour envoyer sur le fil - vous pouvez ensuite décorer les DTO avec les attributs nécessaires. Cela signifie, bien sûr, que vous devez en quelque sorte mapper vos classes de domaine aux DTO et vice versa. Si le mappage est trivial (+ quelques autres cas qui satisfont certaines conventions), vous pouvez utiliser AutoMapper pour cela. L'utilisation de DTO a plusieurs avantages, le meilleur étant que vous ayez une séparation claire des préoccupations - votre modèle de domaine mappé NHibernate concerne la modélisation dans votre domaine, et vos DTO servent à envoyer des données sur le réseau. Ensuite, si l'un change, l'autre n'a pas nécessairement besoin de changer aussi.

Questions connexes