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.

Guilhem Soulas
źródło
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.

FMJaguar
źródło
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

Mohamed Ennahdi El Idrissi
źródło
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.

Sagar Awasthi
źródło