MVC: Jaka jest różnica między modelem a usługą?


15

Dlaczego w niektórych ramach warstwa logiczna nazywa się „Model”, podczas gdy w niektórych nazywana jest „Usługą”. Czy różnią się od siebie, czy po prostu różnią się konwencjami nazewnictwa?


AKTUALIZACJA 1

Pytam dlatego, że w Zend Framework, klasycznym frameworku MVC, wszyscy używają koncepcji Model. Teraz uczę się AngularJS i wydaje się, że słowo Model zniknęło i zostało zastąpione słowem usługa.

Zauważyłem, że usługa jest bardziej jak singleton, który może być ponownie wykorzystywany (przykład: klient REST), podczas gdy model jest bardziej związany z manipulacjami danych pochodzącymi z kontrolera we wzorze MVC.


Udostępnianie badań pomaga wszystkim. Powiedz nam, co próbowałeś i dlaczego nie spełnia twoich potrzeb. To pokazuje, że poświęciłeś trochę czasu, aby spróbować sobie pomóc, oszczędza nam to powtarzania oczywistych odpowiedzi, a przede wszystkim pomaga uzyskać bardziej konkretną i odpowiednią odpowiedź. Zobacz także How to Ask
komik

Parafrazując Szekspira: co jest w nazwie, róża o dowolnym innym imieniu jest wciąż różą. Twój model aplikacji może zostać zaimplementowany jako usługa.
jwenting

Odpowiedzi:


22

Model: Pola należące do obiektu, metody, które pomagają uzyskać / ustawić dane z obiektu (akcesorium o pełnej nazwie, które zwraca imię + nazwisko)

Usługa: metody wykonywania operacji na jednym lub kilku modelach, patrz „jednostka pracy”, transakcje itp.


Pracownik :: tworzenie powinien po prostu pobrać zestaw danych, w razie potrzeby przeprowadzić weryfikację modelu i zwrócić Obiekt pracownika.

EmployeeService :: rentalEmployee może utworzyć pracownika, wysłać mu powitalny e-mail, utworzyć skrzynkę pocztową, zrobić z niego kanapkę itp. ... może zwrócić zestaw danych lub kod wyniku itp.


Może to również wpłynąć na sprawdzanie poprawności:

Walidacja modelu: pracownik musi mieć identyfikator, imię i nazwisko oraz datę urodzin

Walidacja usługi: pracownicy na stanowisko barmana muszą mieć ukończone 21 lat i być zatwierdzeni przez kierownika.


Dziękuję za bardzo konkretny przykład ilustrujący, jak złożona może być logika biznesowa rzeczywistych słów, a tym samym dlaczego dodatkowa warstwa usługi może pomóc oprócz warstwy modelowej.
wlnirvana

3

Zgodnie z moim doświadczeniem warstwa modelu we wzorcu projektowym MVC odnosi się do każdego komponentu oprogramowania związanego z manipulacją danymi (POJO, DAO, aż do SQL, JDBC itd.).

Podczas gdy warstwa usługi jest w rzeczywistości dodatkiem do MVC:

Wiemy, że komponenty warstwy modelu są wywoływane wewnątrz warstwy kontrolera . Po zbudowaniu tego ostatniego zdajesz sobie sprawę, że nie wygląda on zwięźle (bałagan z brudnym kodem); Kontroler może nie pozwolić sobie na dodatkowe szczegóły (np. formatowanie parametrów żądania przed wywołaniem metody DAO, która je wykorzysta ...). Dlatego możesz dołączyć tę dodatkową warstwę, a mianowicie warstwę usługi .

W końcu możesz umieścić swój brudny kod w metodach statycznych z sensowną nazwą, parametrami i tak dalej, co dałoby syntetyczną warstwę kontrolera.

Spójrz na ten link:

/programming/2762978/the-purpose-of-a-service-layer-and-asp-net-mvc-2


1
Właśnie tak widzę warstwę usług. Ale potem częściej widzę, że służy do obsługi zewnętrznego interfejsu API w modelu biznesowym. Oba scenariusze uważam za prawidłowe. Problem polega właśnie na zderzeniu nomenklatury.
burntblark

2

Strukturalnie te podstawowe klasy są takie same, jednak służą do klasyfikowania różnych problemów związanych z warstwami usług i modeli implementacji MVCS

Service:- A concrete service class defines the API of an external Service.

Model :- Defines the API of the applications data model.

Tak więc, chociaż klasy podstawowe są podobne, konkretne klasy utworzone przez rozszerzenie tych klas podstawowych służą dwóm zupełnie innym celom.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.