Jakie zastosowanie ma warstwa logiki biznesowej (BLL)?

14

Czytając o dobrych praktykach dotyczących aplikacji bazodanowych, często spotykam się z zwolennikami tak zwanych „warstw logiki biznesowej” i staram się zdecydować, czy najlepiej, aby mój projekt z nich korzystał (jest to mały projekt osobisty). Mój problem polega na tym, że nie mogę wymyślić niczego, co by BLL mogło zrobić, czego DAL nie może już obsłużyć (wykonywanie zapytań i mapowanie wyników na obiekty), więc moja BLL po prostu wywołuje DAL bez robienia czegokolwiek.

Może mylę się co do tego, co powinien robić DAL. Ale niezależnie od tego, jakiego rodzaju funkcjonalności należy oczekiwać od BLL w aplikacji do zarządzania bazą danych?

Andrew Arnold
źródło
Brzmi jak dylemat wydajności / elastyczności / ponownego użycia kodu.
Job
@Job - Tak, w pewnym sensie, zwłaszcza, że ​​jest to mała aplikacja z niewielką szansą na ponowne użycie kodu (jeszcze). Ale częściowo stara się również zastosować najlepszą możliwą praktykę.
Andrew Arnold
Głosowałem za wszystkimi, ponieważ wszystkie są świetnymi odpowiedziami; niestety mogę zaakceptować tylko jeden.
Andrew Arnold

Odpowiedzi:

10

W przypadku moich mniejszych aplikacji moja BLL zwykle zaczyna się jako przejście do DAL. Nic mi nie jest. Kiedy „odkrywam” reguły biznesowe, BLL jest tam, gdzie je umieszczam. W trakcie pisania testów znajduję też wiele rzeczy potrzebnych w BLL. W przypadku moich osobistych aplikacji tworzę reguły biznesowe, a BLL wciąż tam je umieszczam. Dla mnie BLL jest czymś, co rośnie z czasem. Im dłużej pracuję nad projektem, tym większy jest jego BLL.

Czy rozważałbym połączenie BLL i DAL dla małego projektu? Mogę, z wyjątkiem faktu, że zmieniam technologie DAL tak często, jak zmieniam fryzury, i lubię mieć coś, co odizoluje od tego kod mojego klienta.

Marcie
źródło
2
Nie zmieniłem fryzury od 20 lat. Nie chciałbym zmieniać mojej technologii DAL tak często, jak zmieniam fryzury.
Erik Funkenbusch
3
Niektóre osoby aktualizują swój DAL również co 20 lat!
Marcie,
4
Dobra odpowiedź. Często małe projekty naprawdę nie mają zbyt wiele do dodania do BLL. Często zdarza się, że małe projekty stają się większe, a jeśli nie masz co najmniej powłoki BLL, rosnąca ilość logiki będzie gromadzić się w warstwie prezentacji lub DAL, z których żaden nie jest szczególnie pożądany.
Carson63000,
5

BLL obsługuje elementy, które są częścią domeny biznesowej, a nie częścią bazy danych, a nie częścią interfejsu użytkownika (zwykle). Na przykład przy użyciu wieku klienta w celu ustalenia, czy kwalifikuje się on do specjalnej zniżki dla seniorów. DAL nie powinien tego robić, powinien po prostu pobierać dane klienta, a następnie przechowywać je z danymi rabatu po zakończeniu pracy BLL. DAL powinien bardziej koncentrować się na CRUD. W małych aplikacjach te dwie kwestie mogą się pokrywać.

FrustratedWithFormsDesigner
źródło
W rzeczywistości jest to część problemu z próbą wyodrębnienia „warstw” lub „warstw” w ten sposób. Często coś musi przecinać warstwy, ponieważ lepiej pasuje do tej innej warstwy. Świetnym przykładem są zapytania SQL z wbudowaną logiką biznesową. Na przykład obliczenia wieku można wykonać w całości w warstwie SQL (lub ORM) bardziej efektywnie.
Erik Funkenbusch
2
@Mystere Man Wydajniej jest subiektywny. Ten komentarz oznacza, że ​​wiesz, co dzieje się w interfejsie. Ma bardzo statyczny charakter. Skorzystaj z zapytań SQL, aby zoptymalizować dane, ale jest pewna linia, gdy zaczynasz wiązać interfejs użytkownika z zapleczem.
Aaron McIver
1
@Mystere Man: Rzeczywiście może. I często prawdą jest, że rzeczy „przeciekają” z jednej warstwy na drugą. Prawdziwa sztuka polega na ich rozdzielaniu i trzymaniu ich oddzielnie. Wiem, że nie zawsze jest to łatwe ...
FrustratedWithFormsDesigner
1
A bum , przedwczesna optymalizacja podnosi brzydką głowę! Trudno mi wyobrazić sobie, że proste porównanie dat jest tak wąskim gardłem, że uzasadnia przeniesienie reguły biznesowej do DAL. Utrzymanie również powinno być celem, a nie tylko szybkością.
TMN
5

Andrzej,

Warstwy logiki biznesowej są tym, co kończy się, gdy tworzysz programowanie oparte na domenie i skupiasz się na podstawowych działaniach domeny. Jeśli usuniesz warstwę prezentacji (GUI, sieć) i warstwę infrastruktury (db, łączność sieciowa itp.), Masz podstawowe działania, które są częścią twojej domeny, takie jak wpłata pieniędzy na konto bankowe. Teraz, jeśli modelowałeś swoją warstwę biznesową i odizolowałeś ją od prezentacji i infrastruktury, możesz łatwo przenieść ją na inne zastosowania, takie jak Internet lub urządzenia mobilne. To czysty sposób myślenia o rozwoju i z tego, co widziałem, nie bierze się tego wszystkiego tak poważnie.

Polecam zdobyć Eric Evans - Domain Driven Design, która jest dobrą książką, która uzasadnia skupienie wysiłków programistycznych na domenie. Wprawdzie jest to trochę sucha lektura w połowie, ale nabiera tempa i ma silne przekonanie co do tego, co programiści robią źle z dzisiejszymi systemami.

Desolate Planet
źródło
4

Nic nie mówi, że musisz mieć określoną liczbę poziomów lub warstw. Wszystko zależy od złożoności twojego projektu. Spójrz na wiele przykładowych aplikacji MVC, takich jak nerd dinner lub sklep muzyczny. Wszystkie używają 2 warstw, ponieważ w przypadku aplikacji, które mają bardzo małą logikę przetwarzania, nie ma to po prostu sensu.

Jednak nawet jeśli Twoja aplikacja jest mała, może odnieść korzyść z abstrakcji warstwy danych od warstwy prezentacji za pośrednictwem trzeciej warstwy, która normalnie byłaby warstwą biznesową. Umożliwia to wprowadzanie zmian w jednym miejscu, a nie w całej warstwie prezentacji.

Załóżmy, że zdecydujesz się zmienić ORM z Linq na SQL na Entity Framework (lub nhibernate). Prawdopodobnie łatwiej będzie to zmienić w warstwie biznesowej niż w warstwie prezentacji, ponieważ prezentacja ściśle łączy się z modelem prezentacji.

Jeśli rozumiesz MVC, tj. Model View Controller, możesz pomyśleć o architekturze aplikacji w podobny sposób. Model jest podobny do warstwy danych, warstwa prezentacji jest widokiem, a warstwa biznesowa kontrolerem.

Erik Funkenbusch
źródło
4

Uzupełnienie odpowiedzi Desolate Planet na temat projektowania opartego na domenach:

Zobacz także architekturę cebuli , która jest bardzo zgodna z koncepcjami projektowania opartego na domenie.

Zauważ, że „warstwa” logiki biznesowej jest rdzeniem cebuli, a każda warstwa infrastruktury (np. Warstwa dostępu do danych) jest jej zewnętrznymi zależnościami. Pomaga to w wielu testach, ponieważ powinieneś być w stanie wyśmiewać każdą zależność od zewnętrznej infrastruktury i w pełni przetestować logikę domeny.

Moim zdaniem: warstwa logiki biznesowej to miejsce, w którym żyje „czyste rozwiązanie koncepcyjne”. Reszta to tylko szczegóły implementacji infrastruktury.

Jednak niektóre aplikacje mogą nie wymagać tego rodzaju architektury. Jeśli wszystkie Twoje aplikacje to operacje CRUD w zbiorze danych, twoje „czysto koncepcyjne rozwiązanie” może być praktycznie puste i wszystko, czego potrzebujesz, to interfejs do edycji bazy danych. W takim przypadku lepiej powinieneś skupić się tylko na warstwach DAL i UI.

Sergio Acosta
źródło
1

Odpowiedź na to pytanie brzmi (IMHO): „Czy mogę całkowicie zastąpić mój DAL i nie muszę przepisywać żadnego kodu logiki biznesowej”?

Pomyśl o tym jak o warstwie prezentacji - dość często myślisz o zmianie GUI na inny, gruby graficzny GUI na pulpicie zostaje zamieniony na klienta WWW, który zamienia się na aplikację na iPhone'a. Nie jest tak często tak myśleć w przypadku BLL / DAL, ponieważ tak naprawdę nigdy nie są zamieniane, z wyjątkiem może czegoś bardzo podobnego (np. SQLServer DB zamienionego na MySQL), ale jeśli uważasz, że musiałeś zmienić DB na pamięć rozproszoną usługi, do której dostęp uzyskano za pomocą interfejsu API, można uzyskać jaśniejsze wyobrażenie o tym, gdzie spotykają się warstwy.

gbjbaanb
źródło