Яке використання має бізнес-логічний шар (BLL)?


14

Читаючи добру практику для застосувань баз даних, я часто натрапляю на прихильників так званих "шарів ділової логіки", і я намагаюся вирішити, чи краще для мого проекту використовувати один (це невеликий особистий проект). Моя проблема полягає в тому, що я не можу придумати що-небудь, щоб зробити BLL тим, що DAL вже не може обробити (виконання запитів і відображення результатів для об'єктів), тому мій BLL просто викликає DAL, нічого не роблячи сам.

Можливо, я помиляюся в тому, що саме повинен робити і DAL. Але незалежно від того, яких функціональних можливостей слід очікувати від BLL в додатку для управління базами даних?


Дилема ефективності проти гнучкості / використання коду повторно.
Робота

@Job - Так, так, тим більше, що це невеличкий додаток з невеликими шансами повторного використання коду (поки що). Але також частково намагаються використовувати найкращу можливу практику.
Ендрю Арнольд

Я підтримав усіх, бо всі вони чудові відповіді; на жаль, я можу прийняти лише одне.
Ендрю Арнольд

Відповіді:


10

Для менших додатків мій BLL зазвичай починається як перехід до DAL. Я з цим все гаразд. Коли я "відкриваю" правила ведення бізнесу, BLL - це те, де я їх розміщую. Я також знаходжу багато речей, необхідних в BLL, коли пишу свої тести. Для своїх особистих програм я складаю ділові правила, і BLL все ще там, де я їх розміщую. Для мене БЛЛ - це те, що зростає з часом. Чим довше я працював над проектом, тим більший його BLL.

Я б розглядав можливість поєднання BLL та DAL для невеликого проекту? Я можу, за винятком того, що я змінюю технології DAL приблизно так само часто, як змінюю зачіски, і мені подобається щось ізолювати мій клієнтський код від цього.


2
Я не змінив зачіску за 20 років. Мені б не хотілося міняти свою технологію DAL так часто, як я міняю зачіски.
Ерік Функенбуш

3
Деякі люди лише оновлюють свій DAL кожні 20 років!
Марсі

4
Гарна відповідь. Для невеликих проектів зазвичай не дуже багато, щоб вкласти в BLL. Крім того, звичайно, щоб невеликі проекти зростали, і якщо у вас не було хоча б оболонки BLL, все більша кількість логіки або збирається накопичуватися в презентаційному шарі або DAL, жоден з яких не особливо бажано.
Carson63000

5

BLL обробляє речі, які є частиною бізнес-домену, а не частиною бази даних і не є частиною інтерфейсу користувача (як правило). Наприклад, використовуючи вік клієнта, щоб визначити, чи відповідає він спеціальній знижці для старших. DAL не повинен цього робити, він повинен просто отримати дані клієнта, а потім зберігати їх із даними про знижки після того, як BLL виконає свою роботу. DAL повинен більше зосереджуватися на CRUD. У невеликих додатках обидві проблеми можуть перетинатися.


Власне, це частина проблеми із спробою виділити подібні "яруси" чи "шари". Часто щось доводиться перетинати шарами, тому що краще підходить для цього іншого шару. Прекрасний приклад - SQL-запити, в які вбудована бізнес-логіка. Наприклад, ваш віковий підрахунок може бути більш ефективно виконаний у шарі SQL (або ORM).
Ерік Функенбуш

2
@Mystere Man Ефективніше є суб'єктивним. Цей коментар означає, що ви знаєте, що відбувається на передній частині. Він має дуже статичний характер. Скористайтеся SQL-запитами, щоб точно оптимізувати дані, але є чітка лінія, коли ви починаєте прив'язувати інтерфейс користувача до заднього.
Аарон Маківер

1
@Майстер Людина: Дійсно, може. І часто вірно, що речі "кровоточать" з одного шару в інший. Справжнє мистецтво полягає у їх розділенні та триманні їх окремо. Я знаю, це не завжди просто ...
FrustratedWithFormsDesigner

1
І бум , передчасна оптимізація піднімає свою потворну голову! Мені важко уявити, що просте порівняння дат - це вузьке місце, яке вимагає перенесення ділового правила до DAL. Технічне обслуговування повинно бути і метою, а не лише швидкістю.
TMN

5

Андрій,

Шари бізнес-логіки - це те, що ви закінчуєте, коли займаєтеся розробкою, орієнтованою на домен, і зосереджуєтесь на основних заходах домену. Якщо ви зніміть презентаційний шар (gui, web) та інфраструктурний шар (db, підключення до мережі тощо), ви отримаєте основні акти, які є частиною вашого домену, наприклад, перерахування грошей на банківський рахунок. Тепер, якщо ви змоделювали свій бізнес-шар і виділили його з презентації та інфраструктури, ви можете легко перенести його на інші види використання, наприклад, на Інтернет або мобільні пристрої. Це чистий спосіб думати про розвиток, і з того, що я бачив, це, на жаль, не сприймається все так серйозно.

Я рекомендую взяти на себе руки Еріка Еванса - дизайну, керованого доменом, який є хорошою книгою, яка виправдовує зосередження зусиль на розробці домену. Щоправда, це трохи сухе прочитання на півдорозі, але воно набирає обертів і має певні переконання щодо того, що розробники роблять не так у сучасних системах.


4

Немає нічого, що говорить про те, що ВАМ БУТИ мати певну кількість ярусів або шарів. Все залежить від складності вашого проекту. Погляньте на багато зразків додатків MVC, таких як вечеря з ботаніком або магазин звукозаписів. Всі вони використовують 2 шари, тому що для програм, що мають дуже мало логіки обробки, це просто не має сенсу.

Однак, навіть якщо ваш додаток невеликий, це може отримати користь від абстрагування рівня даних від шару презентації через третій рівень, який, як правило, є бізнес-рівнем. Це дозволяє вносити зміни в одному місці, а не в усьому шарі презентації.

Припустимо, ви вирішили змінити свій ORM з Linq на SQL на Entity Framework (або nhibernate). Можливо, буде простіше змінити його в бізнес-шарі, ніж у вашому презентаційному шарі, оскільки презентація схильна до своєї моделі презентації.

Якщо ви розумієте MVC, тобто .. Model View Controller, ви можете продумати архітектуру додатків аналогічно. Модель є аналогічною вашому шару даних, шаром презентації є Вид, а бізнес-шар - контролером.


4

Доповнення відповіді запустілої планети про дизайн, керований доменом:

Ознайомтеся також з архітектурою Onion , яка дуже відповідає концепціям дизайну, керованого доменом.

Зверніть увагу, як бізнес-логіка "Шар" є ядром лука, і кожен інфраструктурний рівень (наприклад, рівень доступу до даних) є його зовнішніми залежностями. Це дуже допомагає протестувати, оскільки ви повинні мати змогу знущатися над кожною залежністю від зовнішньої інфраструктури та повністю перевіряти логіку домену.

На мою думку: бізнес-логічний шар - це те, де живе «чисте концептуальне рішення». Решта - лише деталі інфраструктурної реалізації.

Однак деяким додаткам може не знадобитися така архітектура. Якщо всі ваші програми є CRUD-операціями з набором даних, то ваше «чисте концептуальне рішення» може бути фактично порожнім, і все, що вам потрібно, - це редагування бази даних фронтального типу. У такому випадку вам, мабуть, слід краще зосередитись лише на шарах DAL та UI.


1

Відповідь на це питання (IMHO): "чи можу я повністю замінити свій DAL і не доведеться переписувати будь-який мій бізнес-логічний код"?

Подумайте про це як про свій презентаційний шар - його досить звичайно думати про зміну графічного інтерфейсу на інший, товстий графічний інтерфейс настільного ПК заміняється на веб-клієнта, який заміняється на додаток для iPhone. Думати не так часто, як це для BLL / DAL, оскільки вони ніколи не поміняються, за винятком чогось подібного (наприклад, БД SQLServer замінено на MySQL), але якщо ви уявляєте, вам довелося змінити ваш БД на розподілену пам’ять сервісу, до якого звертався за допомогою API, ви можете зрозуміти, де зустрічаються шари.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.