2013-09-25 13 views
1

Я слышал о том, как много раз помещать DAL в библиотеку классов. Это имеет смысл, и я хочу сделать это, чтобы я мог уменьшить дублирование кода в приложениях. Я решил использовать Entity Framework для создания DAL.Можно ли обернуть BLL домена в его собственную библиотеку классов и как бы настроить его?

Из того, что я понимаю о N-многоуровневых приложениях, однако, заключается в том, что DAL действительно собирается разоблачить классы POCO, которые я буду рассматривать как DTO. Чтобы сделать это легко, мой DAL.dll будет выставлять классы, такие как EmployeeDto, и методы, подобные GetEmployeeDtoByID(int ID), чтобы дать понять, что этот слой не создает конечные модели домена.

Но что делать, если мне нужна многоразовая DLL, которая выпускает доработанные модели домена? Было бы неплохо создать новый проект, добавить ссылку CompanyBLL.dll и начать звонить GetAllEmployees, зная, что приведенные здесь классы являются истинными представлениями моделей домена для этого объекта. По сути, каждый проект, который я делаю, просто становится новым уровнем презентации для различных необходимых инструментов.

Я знаю, что это личный выбор, который я должен сделать, когда я начну развертывать N-многоуровневые приложения, но разве это разумная цель? Если да, я делаю DAL.dll и только когда-либо действительно ссылаюсь на него, когда я строю свою библиотеку классов BLL? было бы разумнее объединить их в одну библиотеку классов?

Я просто не уверен, что я сумасшедший, не желая перестраивать свою бизнес-логику для каждого приложения, которое я делаю, и если это правильный способ сделать это.

ответ

2

Я бы рекомендовал эту архитектуру.

Presentation ->BLL ->Repository ->EF ->Db

Ваше хранилище возвращает коллекцию ваших объектов, которые EF несет ответственность.

Ответственность вашего repository состоит в том, чтобы выполнить CRUD operations. Внутри он использует EF, но ваш BLL или presentation не должен об этом знать.

+0

Таким образом, 'repository' содержит все предопределенные операторы LINQ, которые мне нужно выполнить против моего' DbSet', и связывает их с 'DbContext'. Понял. Является ли хорошей идеей обернуть каждый шаг этого в библиотеку классов, каждый из которых сопряжен с каждым из своих наборов единиц тестирования внедрения? – JHixson

+1

Точно. Вы можете создать библиотеку классов для каждого компонента. Это скорее организационный и структурный вопрос, который зависит от личных предпочтений. Вам нужно найти баланс между папками и проектами. –