Так було
Протягом багатьох років я організовував свої програмні рішення як такі:
- Шар доступу до даних (DAL) для абстрагування доступу до даних
- Бізнес-логічний шар (BLL) застосовує бізнес-правила до наборів даних, обробляє автентифікацію тощо.
- Утиліти (Util) - це лише бібліотека поширених утилітних методів, які я створив з часом.
- Презентаційний шар, який, звичайно, може бути веб, настільний, мобільний, будь-який інший.
Так, як зараз
Останні чотири роки або близько того я використовую Entity Framework Microsoft (я переважно є 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 з майбутніх проектів з причин, зазначених вище, але, перш ніж це зробити, я хотів опитати тут спільноту щодо вашої оглядовості / передбачення / думки, перш ніж спуститися на проект і виявити проблему, яку я не зробив '. t передчувати.
Будь-які думки цінуються.
Оновлення
Здається, що думка полягає в тому, що окремий DAL не потрібен, але (роблячи тут власний висновок) - це гарна ідея, щоб уникнути блокування постачальника. Наприклад, якщо у мене є DAL, який дозволяє абстрагувати виклики EF, як показано вище, якщо я коли-небудь перейти на якогось іншого постачальника, мені не потрібно переписувати свій BLL. Необхідно буде переписати лише ті основні запити в DAL. Сказавши це, мені складно передбачити сценарій, в якому це відбудеться. Я вже можу зробити модель EF для Oracle db, MSSQL - це дані, я майже впевнений, що MySql також можливий (??), тому я не впевнений, чи зможе додатковий код коли-небудь дати гідну рентабельність інвестицій.
GetMyObjects(int myId)
простіше, ніж знущатися / заглушувати / підробляти GetObjects.Where(ob => op.accountId == myId).ToList()
.