Разработка DAL и BLL - один / несколько хранилищ данных для связанных таблиц

При разработке нового многоуровневого приложения я сталкиваюсь с трудностями при принятии решения о дизайне моего слоя DAL и BLL.

Предположим, у меня есть информация о сотрудниках, распределенная по нескольким таблицам, имеющая отношения 1-1 и 1-Многие с основной таблицей. Немногие перечислены ниже:

Сотрудник (Master Table),
Employee_Contact_Detail,
Employee_Education,
EMPLOYEE_SKILL,
Employee_Experience

На уровне DAL у меня есть общий репозиторий данных, предоставляющий общие функции, такие как GetAll, GetSingle, Add, Edit, Delete для каждой таблицы.

Теперь я должен спроектировать свой "Репозиторий данных о сотрудниках", полученный из моего "Репозитория универсальных данных", и добавить функции для всех связанных таблиц, перечисленных выше, в одном классе, таком как GetEmployeePersonalDetail, GetEmployeeContactDetail, GetEmployeeEducation, AddEmployeePersonalDetail, EditEmployeePersonalDizetail Inlight IntainLighttail I очень меньшая выгода для "репозитория общих данных". Другой способ заключается в том, что я создаю (и извлекаю из универсального репозитория) отдельный репозиторий данных для каждой таблицы, а затем создаю отдельный класс на уровне бизнес-логики для "Сотрудника".

РЕДАКТИРОВАТЬ

Если я выберу "отдельный репозиторий данных для каждой таблицы", на уровне DAL, а затем вместо "одного класса бизнес-логики" для "Сотрудника", если я создам отдельные классы бизнес-логики, соответствующие каждому репозиторию данных, это будет неприличный подход с учетом сценария?

Большое спасибо за ваше руководство.

1 ответ

Решение

Как уже упоминалось в комментарии к вашему вопросу, это мое мнение.

Проблема:

Если у вас уже есть базовый репозиторий, зачем создавать определенный репозиторий для каждой таблицы? Опять же, в BLL, вы создаете отдельный Service класс ("класс бизнес-логики", как вы упомянули) для каждого хранилища. Это все повторяющаяся работа, которую трудно понять и понять.

Предложение:

Вы не упомянули, какой ORM вы используете (если есть); поэтому я предполагаю, что ваш ORM предоставляет необходимые функции для реализации архитектуры ниже.
Я предлагаю вам закрыть свой DAL в общем хранилище. Не пишите классы DAL для определенных таблиц. Все ваши классы обслуживания будут использовать общий DAL для основных функций CRUD. Все расширенные функциональные возможности должны быть реализованы в самом классе Service.

Что касается классов обслуживания, то вместо создания одного класса для каждого Репозитория / Таблицы снова повторяют работу. Лучше сгруппировать связанные таблицы (Repository не может быть рассмотрен со ссылкой на вышеприведенный абзац) в одном сервисе.

Например, вы создаете общий DAL, который обслуживает основные функции для всех таблиц. Вы создаете EmployeeService это охватывает все таблицы, связанные с вашим сотрудником. Вы создаете AccountService это покрывает всю вашу связанную бухгалтерскую таблицу. Так же, LogService для всех действий, связанных с ведением журнала. Это облегчает взаимодействие со службами, так как вы получаете всех связанных участников в одном классе. Это также уменьшает повторную работу.

Присылайте мне этот и этот вопросы и их принятые ответы.

Я надеюсь, что это объясняет вашу озабоченность.

Редактировать 1

Как уже упоминалось в вашем комментарии, вы нас EF. Он поддерживает необходимые функции для реализации того, что я предложил.

реализация расширенной функциональности в BLL вместо DAL будет перекрывать роли уровня

Да; оно делает. Другая сторона тоже такая же. Когда вы пишете DAL для каждой таблицы, вы фактически пропускаете Business Logic в DAL. В случае каких-либо изменений в бизнес-логике, вам нужно изменить DAL, что не имеет смысла.
По моему предложению, хотя слои перекрываются, проблемы по-прежнему раздельные. DAL обрабатывает только CRUD. BLL обрабатывает всю логику, включая логику базы данных.

Использовали ли вы одну и ту же стратегию в своих проектах?

Да. В некоторых проектах ранее я создавал отдельный DAL для каждой таблицы вместо общего DAL. Это вызвало огромную повторную работу. Хотя проекты были относительно небольшими, накладные расходы были больше. Несколько месяцев назад я начал с относительно большого проекта, в котором реализовал то, что предложил выше. Мы можем видеть облегчение, которое дало нам сейчас.

Другие вопросы по тегам