2010-11-08 9 views
1

Je suis en train de mettre en œuvre un projet de collège pour tester les performances d'Entity Framework 4.0 par rapport à NHibernate (dernière version). Je construis un système de traitement des transactions simple pour faire ce test. Mes entités seront des choses comme client, compte, commande, produit. Je souhaite créer deux DAL distinctes; le premier DAL sera le EntityFramework tandis que le second sera NHibernate. Je vais ensuite créer une couche de logique métier (BLL) qui référence soit une couche DAL soit l'autre et l'utilise pour tester. La BLL inclura des méthodes telles que 'insertNewOrder()', 'amendExistingOrder()', etc. Je veux que mon BLL soit indépendant du framework afin que je puisse facilement basculer entre chaque DAL. Pour cela, je propose de mettre en place une interface 'IContext' qui sera implémentée par chaque DAL. Le 'IContext' inclura mes méthodes 'get()' pour chaque entité ainsi qu'une méthode 'Save()'. Chaque DAL implémentera ensuite ces méthodes de manière spécifique. Les méthodes 'get()' retourneront un IObjectSet, plutôt qu'un ObjectSet. Je vais utiliser un modèle T4 pour créer des entités POCO à partir de mon EDM et les déplacer vers un projet distinct. Chaque DAL peut ensuite référencer le même ensemble d'entités POCO. Mon BLL va alors créer une instance de l'interface IContext et appeler des méthodes sur cette interface, plutôt que de créer un contexte spécifique (ObjectContext ou ISession).Basculer entre EntityFramework et NHibernate

Cela vous semble-t-il une solution réalisable? Tout article que je trouve sur ce sujet inclut l'utilisation de référentiels, un modèle que je ne comprends pas parfaitement et que je voudrais éviter d'avoir à mettre en œuvre si possible. Mon objectif est de tester chaque plate-forme plutôt que de créer une application qui soit correcte d'un point de vue architectural. Voir ici par exemple:

Entity Framework POCO objects

J'ai en partie sur la base de cette approche sur un chapitre de « programmation Entity Framework 2e édition » par Julia Lerman. Je suis nouveau à la fois NH et l'EF (en particulier NH), donc tous les conseils ou recommandations seraient appréciés. Merci.

+0

Découvrez http://ormbattle.net/. Il pourrait être intéressant de comparer vos résultats par rapport à cela. Ils décrivent et discutent également les tests, qui peuvent vous donner d'autres idées: http://ormbattle.net/index.php/performance-tests.html –

Répondre

4

Ce que vous cherchez est le Repository Pattern. Voir (parmi beaucoup d'autres endroits) https://stackoverflow.com/questions/3175/repository-pattern-tutorial-in-c à titre d'exemple.

L'idée derrière le modèle référentiel est que vous créer des interfaces pour votre accès aux données, par exemple .:

public interface IAddressRepository 
{ 
    Address GetById(int id); 
} 

Ensuite, vous créez deux implémentations de cette interface: un pour le Entity Framework et un pour NHibernate. Enfin, vous créez un mécanisme pour obtenir l'implémentation dont vous avez besoin en fonction de l'interface. Les conteneurs IoC comme Windsor sont géniaux.

0

Si vous voulez tester les performances, vous ne devez pas créer de couche intermédiaire. Aller avec du code brut dans les deux cas qui ont la même entrée/sortie, mais rien de plus.

La création d'une couche intermédiaire vous limitera au plus petit dénominateur dans les deux cas. En implémentant séparément les deux parties concurrentes, vous pouvez effectuer des optimisations et des implémentations concrètes spécifiques à une technologie qui serait impossible à faire avec la même couche d'accès.

De même, votre tâche n'est pas de créer la même couche DAL, mais de tester les performances. Vous devriez donc commencer par vous préoccuper des optimisations et des cas spéciaux dans les deux technologies avant d'essayer quelque chose d'autre.

+0

Merci pour la réponse. Je pense que je vais continuer avec mon approche de couche intermédiaire pour le moment cependant. Je suis heureux de limiter la portée du projet à la façon dont les frameworks fonctionnent dans une configuration (relativement) par défaut lorsqu'ils sont appliqués à un scénario spécifique (un système de traitement de transaction dans cette instance). Un superviseur m'a conseillé de veiller à ce que je compare comme avec, et ce sont des cadres assez importants. Si je regarde chacun séparément, il se peut que je finisse avec trop de matériel et que je ne finisse jamais! – JMc

Questions connexes