Переключение между EntityFramework и NHibernate - PullRequest
1 голос
/ 08 ноября 2010

Я реализую проект колледжа для тестирования производительности Entity Framework 4.0 по сравнению с NHibernate (последняя версия). Я строю простую систему обработки транзакций для этого тестирования. Моими лицами будут такие вещи, как Клиент, Аккаунт, Заказ, Продукт.

Я хочу создать два отдельных DAL; первый DAL будет EntityFramework, а второй - NHibernate. Затем я создам слой бизнес-логики (BLL), который ссылается либо на один DAL, либо на другой, и использую его для тестирования. BLL будет включать такие методы, как «insertNewOrder ()» ,mendExistingOrder () и т. Д. Я хочу, чтобы мой BLL не зависел от фреймворка, поэтому я могу легко переключаться между каждым DAL.

Чтобы включить это, я предлагаю реализовать интерфейс «IContext», который будет реализован каждым DAL. IContext будет включать мои методы get () для каждой сущности, а также метод Save (). Каждый DAL затем реализует эти методы по-своему. Методы get () вернут IObjectSet, а не ObjectSet.

Я буду использовать шаблон T4 для создания объектов POCO из моего EDM и перенести их в отдельный проект. Каждый DAL может затем ссылаться на один и тот же набор объектов POCO.

Затем мой BLL создаст экземпляр интерфейса IContext и вызовет методы для этого интерфейса вместо создания определенного контекста (ObjectContext или ISession).

Это звучит как выполнимое решение? Любая статья на эту тему, которую я нахожу, включает в себя использование репозиториев, шаблон, который я не до конца понимаю, и который я бы хотел избежать, если это возможно. Я сосредоточен на тестировании каждой платформы, а не на создании приложения, которое является архитектурно правильным. Смотрите здесь, например:

Объекты POCO Entity Framework

Я частично основал этот подход на главе из "Programming Entity Framework 2nd Edition" Джулии Лерман. Я новичок как в NH, так и в EF (особенно в NH), поэтому любые советы или рекомендации будут оценены. Благодарю.

Ответы [ 2 ]

4 голосов
/ 08 ноября 2010

То, что вы ищете, это шаблон репозитория.См. (Среди многих других мест) https://stackoverflow.com/questions/3175/repository-pattern-tutorial-in-c в качестве примера.

Идея шаблона хранилища заключается в том, что вы создаете интерфейсы для доступа к данным, например:

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

Затем вы создаете две реализации этого интерфейса: одну для Entity Framework и одну для NHibernate.

Наконец, вы создаете механизм для получения требуемой реализации на основе интерфейса.Контейнеры IoC, такие как Windsor , хороши в этом.

0 голосов
/ 08 ноября 2010

Если вы хотите проверить производительность, вы не должны создавать средний слой.Идите с необработанным кодом в обоих случаях, которые имеют одинаковый ввод / вывод, но не более того.

Создание среднего слоя ограничит вас наименьшим знаменателем для обоих случаев.Разделяя обе конкурирующие части по отдельности, вы можете выполнять оптимизацию и конкретные реализации, характерные для одной технологии, что было бы невозможно сделать с одним и тем же уровнем доступа.

Также ваше назначение - не создавать один и тот же DAL, а тестировать производительность.Поэтому вам следует начать беспокоиться об оптимизации и особых случаях в обеих технологиях, прежде чем пытаться что-то другое.

...