2009-09-24 7 views
2

Je suis dans une phase de mappage de mes classes CSharp dans des tables de base de données. J'ai décidé d'utiliser NHibernate comme outil ORM après comparaison avec d'autres outils. ActiveRecord: selon le site Web du projet, l'utilisation d'ActiveRecord peut augmenter considérablement la productivité. Cependant, je n'aime pas l'idée d'ajouter des attributs à mes classes CSharp. Après tout, ma classe ne devrait avoir aucune connaissance des relations avec les bases de données. En utilisant ActiveRecord, je lierai mes classes joliment séparées à ActiveRecord, et me donnera du temps si je veux changer l'implémentation de DAO Layer underline à l'avenir. FluentNHibernate: FluentNhibernate a été ma première tentative au début de la cartographie. Mais j'ai aussi quelques problèmes avec cette approche. 1) Je n'aime pas mes stratégies de mapping compilées en fichiers binaires. Je voudrais pouvoir changer de mapping en modifiant les fichiers xml. 2) La maturité de FluentNHibernate. NHibernate existe depuis longtemps et a BEAUCOUP d'utilisateurs, donc je suis assez à l'aise avec sa maturité. Au contraire, FluentNhibernate est relativement jeune et n'a pas été testé par autant d'utilisateurs. Même si je pouvais plonger dans la source pour résoudre n'importe quel problème, je ne suis pas à l'aise avec mes compétences pour toucher à la mise en œuvre de bas niveau. 3) La disponibilité de la documentation pour FluentNHibernate est beaucoup plus grande que celle de NHibernate. Je voudrais avoir un endroit où aller quand je frappe un mur dur. NHibernate: Actuellement, j'utilise Nhibernate xml nu pour faire le mapping. Pour être honnête, travailler avec XML me donne des maux de tête massifs. Littéralement, je dois me garder de l'impulsion de simplement jeter les fichiers .hbm.xml et saisir ActiveRecord ou FluentNHibernate plusieurs fois par jour. Donc, voici mon dilemme: Devrais-je aller avec mon coeur de "Juste obtenir cette fichue chose faite!"; Ou devrais-je suivre la «ligne directrice des bonnes pratiques» pour souffrir de la douleur maintenant et obtenir un temps relativement facile plus tard?NHibernate ou FluentNHibernate ou ActiveRecord?

Un commentaire?

Répondre

4

Veuillez noter que les classes liées à un ORM ne doivent pas nécessairement être traitées comme des classes d'objets métier ou exposées à votre interface utilisateur. Ils doivent être considérés comme faisant partie de votre couche de données. Ce modèle n'est pas vraiment unique à ActiveRecord. En règle générale, vous souhaitez que votre couche de gestion en sache le moins possible en sachant qu'un ORM se trouve en dessous et que vous ne voulez pas que votre interface utilisateur connaisse votre couche de données. Vous voulez également considérer DTOs. Fluid NHibernate résout le problème d'avoir un XML faiblement typé qui peut être sujet à erreur pour refactoriser.

Bien qu'il puisse y avoir des inconvénients à adopter quelque chose comme ActiveRecord, cela semble être une solution appropriée dans votre cas. La meilleure raison d'utiliser les fichiers .hbm.xml est de les générer à partir de votre base de données (à l'aide de CodeSmith). Coder à la main les fichiers .hbm.xml est rarement la meilleure option.

+0

Merci pour votre réponse. Je vais aller avec ActiveRecord pour le moment. –

Questions connexes