Co tak naprawdę oznacza „logika biznesowa”, jeśli nie „cały kod strony trzeciej”?

25

Słyszałem, jak ludzie dużo mówią o logice biznesowej w pracy i Internecie, i przeczytałem o niej kilka pytań na tej stronie, ale ten termin wciąż nie ma dla mnie większego sensu. Oto na przykład niektóre (parafrazowane) stwierdzenia, które często widzę:

  • „Logika biznesowa jest częścią twojego programu, która koduje aktualne reguły biznesowe”. Większość definicji, które przeczytałem, jest takich okrągłych.

  • „Logika biznesowa to wszystko, co jest specyficzne dla konkretnej aplikacji”. Nie rozumiem, czym to się różni od „Twoja konkretna aplikacja to nic innego jak logika biznesowa”, chyba że przypadkowo opracowaliśmy kilka kół, do których moglibyśmy wykorzystać istniejące oprogramowanie innych firm. Stąd tytuł pytania.

  • „Powinna istnieć warstwa logiki biznesowej powyżej warstwy dostępu do danych i poniżej warstwy GUI”. W kodzie, który piszę, osoby korzystające z bazy danych muszą wiedzieć, do jakich danych mają uzyskiwać dostęp, a kod interfejsu użytkownika musi wiedzieć wiele o tym, co wyświetla, aby wyświetlać go poprawnie, i nie ma nic do zrobienia pomiędzy te dwa miejsca inne niż przekazywanie obiektów blob danych między klientem a serwerem. Więc co właściwie powinno wejść w warstwę logiki biznesowej?

  • „Logika biznesowa powinna być oddzielna od logiki prezentacji”. Większość otrzymywanych przez nas żądań funkcji polega na zmianie logiki prezentacji ze względów biznesowych. Jeśli jedna z reguł biznesowych ma domyślnie wyświetlać ceny amerykańskich obligacji skarbowych w notacji 32. (zapewniając jednocześnie interfejs użytkownika dla użytkownika, aby to skonfigurował), logika prezentacji musi przynajmniej wiedzieć, że ta reguła istnieje, jeśli nie zostanie w pełni wdrożona. Wydaje się również, że większa część projektowania UX pomaga użytkownikowi zrozumieć zasady biznesowe, które nasze oprogramowanie próbuje wdrożyć.

Czy to możliwe, że faktycznie pracuję w zespole, który zajmuje się wyłącznie logiką biznesową, a cała logika pozabiznesowa jest wykonywana przez inne zespoły? Czy też cała koncepcja „logiki biznesowej” jako odrębnej jednostki może być zastosowana tylko w przypadku niektórych aplikacji lub architektur?

Aby pomóc w uzyskaniu konkretnych odpowiedzi: Udawaj, że musisz ponownie wdrożyć aplikację Pizza Domino. Jaka jest logika biznesowa i jaka jest logika pozabiznesowa tej aplikacji? I jak byłoby możliwe umieścić logikę biznesową zamawiania pizzy we własnej „warstwie” kodu, tak aby większość informacji o pizzy nie przenikała do warstw dostępu do danych i prezentacji?

Aktualizacja: doszedłem do wniosku, że mój zespół prawdopodobnie robi 90% kodu interfejsu użytkownika i większość - ale nie wszystkie - logiki biznesowej, którą nazwalibyście, pochodzi od innych zespołów lub firm. Zasadniczo nasza aplikacja służy do monitorowaniadane finansowe i prawie wszystkie funkcje umożliwiają użytkownikowi dostosowanie wyświetlanych danych i sposobu ich wyświetlania. Nie dzieje się kupno ani sprzedaż (choć integrujemy się trochę z innymi aplikacjami naszej firmy, które to robią), a rzeczywiste dane są dostarczane przez mnóstwo zewnętrznych źródeł. Pozwalamy jednak użytkownikom robić takie rzeczy, jak wysyłanie kopii swoich „monitorów” do innych użytkowników, więc szczegóły dotyczące tego, jak sobie z tym poradzimy, prawdopodobnie kwalifikują się jako logika biznesowa. W rzeczywistości istnieje aplikacja mobilna, która obecnie komunikuje się z niektórymi z naszego kodu zaplecza, i wiem dokładnie, jaką część naszego kodu frontendowego chciałbym udostępnić naszemu interfejsowi użytkownika w idealnym świecie (w zasadzie M w naszym quasi-MVC), więc Domyślam się, że to dla nas BLL.

Akceptuję odpowiedź user61852, ponieważ pozwoliło mi to na bardziej konkretne zrozumienie tego, co robi „logika biznesowa” i do której się nie odnosi.

Ixrec
źródło
1
Zamiatasz całe rusztowanie, infrastrukturę, płytę grzewczą, kod biblioteki pod dywanikiem „wymyślanie kół”, ale tak naprawdę jest to spory fragment kodu i nie wszystko może być kodem innej firmy. Może nie jest unikalny dla twojego produktu, ale jest unikalny dla twojego produktu i trzech konkurencyjnych produktów. Może masz dziwne wymagania, które wykluczają istniejące rozwiązania. Być może istniejące rozwiązania nie ograniczają go z powodów technicznych (powiedzmy, nie osiągaj celów wydajnościowych - jest to częsty powód do ponownego tworzenia podstawowych danych ustrukturyzowanych podczas tworzenia gier).
Dla nas infrastruktura, kod biblioteki i rusztowania są w większości utrzymywane przez inne zespoły lub firmy zewnętrzne (chociaż płyta kotłowa jest równomiernie rozmieszczona wszędzie), więc może to jest tak proste, jak ja w zespole wykonującym interfejs użytkownika / logikę biznesową.
Ixrec
8
Jeśli zamówisz więcej niż 50 USD, otrzymasz bezpłatne paluszki chlebowe z serem.
kdgregory
1
@ raptortech97 Mówi, że „jeśli zamówisz więcej niż 50 USD, otrzymasz bezpłatne paluszki chlebowe pokryte serem” to logika biznesu.
user253751
„Jeśli jedna z reguł biznesowych ma domyślnie wyświetlać ceny obligacji rządowych USA w notacji 32. (zapewniając jednocześnie interfejs użytkownika dla użytkownika, aby to skonfigurował), logika prezentacji musi przynajmniej wiedzieć, że ta reguła istnieje” nie, nie i niektórzy powiedzieliby, że nie powinni. interfejs użytkownika może mieć tylko etykietę / pole tekstowe / widżet, aby wyświetlić dowolny ciąg logiki biznesowej (lub bardziej prawdopodobnie model, ale ...) przekazany do niego.
Joshua Drake

Odpowiedzi:

27

Dam ci kilka wskazówek dotyczących aplikacji CRUD , ponieważ nie mam dużego doświadczenia w grach lub aplikacjach intensywnie graficznych:

  • Logika biznesowa zazwyczaj obejmuje zasady, których właściciel firmy nauczył się lub decydował przez lata działalności, na przykład: „odrzuć nowy kredyt, jeśli klient nie skończył jeszcze płacić ostatniej” , lub „nie sprzedajemy śniadania po 11 rano ” lub „ w poniedziałki i wtorki klienci mogą kupić dwie pizze w cenie jednej ” .
  • Oczywiście warstwa prezentacji musi wyświetlać komunikat informujący o dostępności rabatu lub przyczynie odrzucenia kredytu, ale taka warstwa nie decyduje o tych rzeczach, tylko komunikuje użytkownikowi coś, co wydarzyło się pod maską.
  • Logika biznesowa zwykle wiąże się z przepływem pracy , na przykład: „ten element musi zostać zatwierdzony w ciągu 3 dni roboczych przez jakiegoś kierownika lub wprowadzony w fazę„ żądania informacji ”, jeśli klient nie dostarczy wymaganych dokumentów, wówczas element zostanie odrzucony” .
  • Warstwa prezentacji zwykle nie radzi sobie z tego rodzaju przepływem pracy, odzwierciedla jedynie stany przepływu pracy.
  • Ponadto warstwa dostępu do danych jest zwykle prosta, ponieważ logika biznesowa już podejmuje decyzje. Na tę warstwę ma wpływ na przykład decyzja o migracji danych z MS SQL Server do Oracle
  • To prawda, że ​​czasami GUI dokonuje pewnej weryfikacji, aby uniknąć połączeń z serwerem, ale jest to coś, co należy zrobić rozsądnie, ponieważ w tej warstwie można mieć dużo logiki biznesowej.
  • Duża część twojego zamieszania mogła wynikać z faktu, że w twojej aplikacji nie ma oddzielenia obaw i faktycznie masz zbyt dużo logiki biznesowej w warstwie prezentacji. Fakt (błędnego) posiadania logiki biznesowej w warstwie aplikacji lub warstwie dostępu do danych nie zmienia faktu, że jest to logika biznesowa.
  • Rzeczy takie jak wyświetlanie odległości w systemie metrycznym zamiast mil / jardów / stóp nie jest logiką prezentacji, lecz logiką biznesową . Warstwa biznesowa musi zwracać dane w wymaganych jednostkach i informować warstwę prezentacji, jakie jednostki obsługuje, aby wyświetlać odpowiednie etykiety, ale z pewnością jest to logika biznesowa.
  • Na logikę biznesową nie powinien mieć wpływu fakt, że używasz Oracle zamiast Postgres, ani fakt, że firma zmieniła logo lub arkusz stylów.
  • Reguły biznesowe istnieją niezależnie od tego, czy automatyzujesz je , pisząc aplikację. Można je egzekwować nawet wtedy, gdy firma stosuje rozwiązania technologiczne, takie jak długopis i papier.
  • Jeśli masz wersję mobilną aplikacji komputerowej lub wersję internetową , każda z tych wersji ma inną warstwę prezentacji , ale (mam nadzieję) tę samą warstwę biznesową.
Tulains Córdova
źródło
5

Wygląda na to, że większość pracy wykonywana jest w warstwie interfejsu użytkownika. Zmiana formatu wyświetlania ze względów biznesowych nie implikuje żadnej logiki biznesowej. Zmiana jest zmianą w logice widoku.

Możliwość zmiany formatu implikuje pewną logikę biznesową, prawdopodobnie związaną z utrzymaniem preferencji.

Utrwalanie formatu pliku cookie można również zaimplementować w warstwie widoku.

Można to jednak zaimplementować w sposób MVC. (Niektóre modele implementują widok jako własne MVC zdolne do obsługi preferencji.)

  • Preferencje użytkownika mogą być przechowywane przez model (baza danych / plik cookie).
  • Kontroler zareagowałby na żądania formatowania, zmieniając preferencje użytkownika w modelu.
  • Widok dostosuje się do preferencji użytkownika. Preferencji można zażądać z modelu lub udostępnić przez kontroler.

Zgadywanie zgadywanych aplikacji.

  • Istnieje model zawierający dostępne obligacje i dane dotyczące ich cen.
  • Istnieje widok pozwalający użytkownikowi zobaczyć różne rzeczy, które może zrobić: wyszukiwać obligacje, wyświetlać ceny, porównywać zyski, przyjmować zamówienia i wyświetlać wyniki zwrócone przez model biznesowy w odpowiedzi na żądanie.
  • Logika biznesowa obsługuje takie rzeczy jak:

    • Przeprowadzanie wyszukiwania i zapewnienie widoku do wyświetlenia.
    • Znalezienie ceny obligacji i zapewnienie widoku do wyświetlenia.
    • Porównywanie wydajności i dostarczanie danych do wyświetlenia.
    • Przetwarzanie zamówień i przechowywanie ich w modelu.

Jeśli zrobisz to dobrze, powinno być możliwe zapewnienie wielu komponentów widoku bez zmiany modelu lub logiki biznesowej. Na przykład, jeśli bieżącym projektem jest strona internetowa, nowy serwer widoków dla aplikacji na iPhone'a lub Androida używałby istniejącego modelu i logiki biznesowej. Mogą one wprowadzać nowe funkcje biznesowe w celu dostarczania powiadomień wypychanych po zrealizowaniu zamówienia, co może wymagać zmian w wielu warstwach.

Podział ten pozwala na rozdzielenie obaw.

  • Warstwa danych reprezentowana przez model wydaje się być względnie stabilna.
  • W warstwie biznesowej podejmowane są decyzje biznesowe: czy prośba zostanie spełniona? Czy uzyskano wszystkie wymagane dane? Czy użytkownik jest autoryzowany? Czy na transakcji są jakieś czerwone flagi?
  • Warstwa widoku jest zwykle mniej stabilna i może być ich więcej niż jedna. Tutaj znajduje się wygląd aplikacji. Możliwe jest całkowite odświeżenie aplikacji bez zmiany innych warstw.
BillThor
źródło