Как это было
В течение многих лет я организовывал свои программные решения как таковые:
- Уровень доступа к данным (DAL) для отвлечения бизнеса от доступа к данным
- Уровень бизнес-логики (BLL) для применения бизнес-правил к наборам данных, обработки аутентификации и т. Д.
- Утилиты (Util) - это просто библиотека общих утилитных методов, которые я создал со временем.
- Уровень представления, который, конечно, может быть веб, настольным, мобильным и прочим.
Так оно и есть сейчас
В течение последних четырех лет я использовал Microsoft Entity Framework (я в основном являюсь разработчиком .NET) и обнаружил, что наличие DAL становится более обременительным, чем чистым, из-за того, что Entity Framework уже выполнила Работа, которую выполнял мой DAL: он абстрагирует бизнес от запуска CRUD для базы данных.
Итак, я обычно получаю DAL, у которого есть набор методов, подобных этому:
public static IQueryable<SomeObject> GetObjects(){
var db = new myDatabaseContext();
return db.SomeObjectTable;
}
Затем в BLL этот метод используется как таковой:
public static List<SomeObject> GetMyObjects(int myId){
return DAL.GetObjects.Where(ob => op.accountId == myId).ToList();
}
Конечно, это простой пример, поскольку в BLL, как правило, применяется еще несколько строк логики, но просто кажется слишком излишним поддерживать DAL для такой ограниченной области.
Не лучше ли просто отказаться от DAL и просто написать мои методы BLL как таковые:
public static List<SomeObject> GetMyObjects(int myId){
var db = new myDatabaseContext();
return db.SomeObjectTable.Where(ob => op.accountId == myId).ToList();
}
Я рассматриваю возможность исключения DAL из будущих проектов по причинам, указанным выше, но прежде чем сделать это, я хотел бы опросить сообщество здесь, чтобы узнать о ваших взглядах / предвидениях / мнениях, прежде чем приступить к реализации проекта и обнаружить проблему, которую я не обнаружил. не ожидаю.
Любые мысли приветствуются.
Обновить
Похоже, что консенсус заключается в том, что отдельный DAL не нужен, но (делая мой собственный вывод здесь) хорошая идея, чтобы избежать блокировки поставщика. Например, если у меня есть DAL, который абстрагирует вызовы EF, как показано выше, если я когда я переключаюсь на другого поставщика, мне не нужно переписывать свой BLL. Только те базовые запросы в DAL должны быть переписаны. Сказав это, мне трудно представить сценарий, в котором это произойдет. Я уже могу сделать EF-модель базы данных Oracle, MSSQL - это данность, я вполне уверен, что MySql также возможен (??), поэтому я не уверен, что дополнительный код когда-либо даст достойную рентабельность инвестиций.
GetMyObjects(int myId)
легче, чем издеваться / заглушки / подделки GetObjects.Where(ob => op.accountId == myId).ToList()
.