Stworzyłem prostą aplikację Java MVC, która dodaje rekordy do formularzy danych do bazy danych.
Moja aplikacja zbiera dane, sprawdza je i przechowuje. Wynika to z faktu, że dane pochodzą od różnych użytkowników online. dane mają głównie charakter liczbowy.
Teraz, gdy dane liczbowe są przechowywane w bazie danych (serwer SQL), chcę, aby moja aplikacja wykonywała obliczenia i wyświetlała wyniki. Użytkownik nie jest zainteresowany sposobem wykonywania obliczeń, dlatego należy je zamknąć. Użytkownik musi mieć możliwość przeglądania tylko prostych danych obliczeniowych (na przykład dane kolumny A minus dane kolumny B podzielone przez dane kolumny C). Wiem, jak pisać procedury składowane dla tego samego, ale chcę aplikację trójwarstwową.
Chcę danych, które umieszczam w bazie danych jako rekord, nad którymi pracuję, wykonując na nim obliczenia. Oryginalne dane powinny pozostać nienaruszone, podczas gdy nowe dane, po obliczeniach, muszą być przechowywane jako nowy rekord jednostki w bazie danych.
Gdzie mam napisać kod do tego obliczenia w tle? Ponieważ są to reguły i logika biznesowa, czy powinienem umieścić go w nowych plikach JavaBeans?
źródło
Odpowiedzi:
Logiki biznesowej powinny być umieszczone w modelu , i powinniśmy dążyć do tłuszczu modeli i chude kontrolerów .
Na początek powinniśmy zacząć od logiki kontrolera. Na przykład: po aktualizacji kontroler powinien skierować kod do metody / usługi, która dostarcza zmiany do modelu.
W modelu możemy łatwo tworzyć klasy pomocnicze / serwisowe , w których można zweryfikować reguły biznesowe aplikacji lub obliczenia .
Podsumowanie koncepcyjne
Kontroler służy do logiki aplikacji. Logika charakterystyczna dla sposobu, w jaki aplikacja chce wchodzić w interakcje z „domeną wiedzy”, do której należy.
Model jest dla logiki, który jest niezależny od aplikacji . Ta logika powinna obowiązywać we wszystkich możliwych zastosowaniach „dziedziny wiedzy”, do której należy.
Dlatego logiczne jest umieszczenie wszystkich reguł biznesowych w modelu.
źródło
The most common mistakes are to implement application logic operations inside the controller or the view(presentation) layer.
[ php-html.net/tutorials/model-view-controller-in-php ]Jak zawsze zależy to od złożoności projektu.
W trywialnych aplikacjach, w których złożoność modelu domeny jest stosunkowo niewielka, można wprowadzić logikę do modeli i nazwać to dniem.
Jednak w przypadku nietrywialnych aplikacji ze złożonymi modelami i mnóstwem reguł biznesowych lepiej jest nieco oddzielić rzeczy.
Jeśli zastosujesz w modelu logikę biznesową, która obejmuje więcej niż jeden model, wprowadzasz ścisłe powiązanie między tymi modelami. W miarę rozwoju aplikacji, modele te stają się coraz bardziej znane
god models
, wiedząc zbyt wiele. A to szybko zmieni się w wielki bałagan, który trudno jest przetestować i utrzymać. W takim przypadku korzystne jest umieszczenie logiki w osobnej warstwie.Decydując się na abstrakcję, zawsze bierz pod uwagę złożoność i cele aplikacji oraz unikaj nadmiernej inżynierii. W przypadku trywialnych / małych aplikacji wprowadzenie większej liczby warstw niż to konieczne zwiększa złożoność zamiast ją zmniejszać.
Robert Martin (wujek Bob) ma dobry post na blogu na ten temat: Czysta architektura.
źródło
The controller interprets the mouse and keyboard inputs from the user, commanding the model and/or the view to change as appropriate
. To jest definicja adaptera.Umieszczenie logiki biznesowej w modelu może brzmieć najlepiej. Kontroler odbiera połączenie ze zdalnej aplikacji internetowej. Kontroler usługi internetowej MVC przejmuje wywołanie i przekierowuje wykonanie do metody w BL. Teraz Business Logic może być zawarty w „Modelu”, ale może być również umieszczony w innym folderze, powiedzmy „Business Logic” . Nie ma więc twardej i szybkiej reguły dotyczącej logiki biznesowej.
Korzystam z usługi internetowej zbudowanej na MVC 3.0, a logiką biznesową jest MODEL MVC .
źródło