MVC: Was ist der Unterschied zwischen einem Modell und einem Service?

15

Warum wird in einigen Frameworks die Logikschicht "Modell" genannt, während sie in einigen Frameworks "Dienst" heißt. Unterscheiden sie sich voneinander oder unterscheiden sie sich nur durch Namenskonventionen?


UPDATE 1

Der Grund, den ich frage, ist, dass in Zend Framework, einem klassischen MVC-Framework, jeder das Konzept von Model verwendet. Jetzt lerne ich AngularJS und es scheint, dass das Wort Model verschwunden ist und durch das Wort service ersetzt wurde.

Was mir aufgefallen ist, ist, dass ein Dienst eher einem Singleton ähnelt, der immer wieder verwendet werden kann (Beispiel: ein REST-Client), während ein Modell eher mit den Datenmanipulationen zusammenhängt, die vom Controller im MVC-Muster ausgehen.

Guilhem Soulas
quelle
Das Teilen Ihrer Forschung hilft allen. Sagen Sie uns, was Sie versucht haben und warum es nicht Ihren Bedürfnissen entsprach. Dies zeigt, dass Sie sich die Zeit genommen haben, um sich selbst zu helfen, es erspart uns, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu erhalten. Siehe auch Wie man
Mücke
Um Shakespeare zu paraphrasieren: Was in einem Namen ist, eine Rose von jedem anderen Namen ist immer noch eine Rose. Ihr Anwendungsmodell ist möglicherweise als Dienst implementiert.
28.

Antworten:

22

Modell: Felder, die zum Objekt gehören, Methoden zum Abrufen / Festlegen von Daten vom Objekt (ein vollständiger Name-Accessor, der den Vor- und Nachnamen zurückgibt)

Service: Methoden zur Ausführung von Operationen mit einem oder mehreren Modellen, siehe 'Arbeitseinheit', Transaktionen usw.


Employee :: create sollte nur eine Reihe von Daten aufnehmen, gegebenenfalls eine Modellvalidierung durchführen und ein Employee-Objekt zurückgeben.

EmployeeService :: hireEmployee erstellt möglicherweise den Mitarbeiter, sendet ihm eine Begrüßungs-E-Mail, erstellt ein Postfach, macht ihm ein Sandwich usw. Es gibt möglicherweise den Datensatz oder einen Ergebniscode usw. zurück.


Dies kann sich auch auf die Validierung auswirken:

Modellvalidierung: Der Mitarbeiter muss eine ID, einen Vor- und Nachnamen sowie einen Geburtstag haben

Service-Validierung: Mitarbeiter für die Barkeeper-Position müssen mindestens 21 Jahre alt sein und von einem Manager genehmigt werden.

FMJaguar
quelle
Vielen Dank für das sehr konkrete Beispiel, das zeigt, wie komplex echte Geschäftslogik sein kann und warum eine zusätzliche Serviceebene neben der Modellebene hilfreich sein kann.
Wlnirvana
3

Nach meiner Erfahrung bezieht sich die Modellschicht innerhalb des MVC- Entwurfsmusters auf jede Softwarekomponente, die mit Datenmanipulation zu tun hat (POJOs, DAO, bis hin zu SQL, JDBC usw.).

Während die Service-Schicht eigentlich eine Ergänzung zu MVC ist:

Wir wissen, dass die Komponenten des Model- Layers innerhalb des Controller- Layers aufgerufen werden. Sobald letzteres erstellt wurde, stellen Sie fest, dass es nicht präzise aussieht (durcheinander mit schmutzigem Code). Der Controller bietet möglicherweise keine zusätzlichen Details an (z. B. Formatieren von Anforderungsparametern vor dem Aufrufen einer DAO-Methode, die diese verbraucht ...). Daher können Sie diese zusätzliche Ebene, nämlich die Service- Ebene, einbeziehen.

Schließlich können Sie Ihren Dirty-Code in statischen Methoden mit einem aussagekräftigen Namen, Parametern usw. einschließen, was zu einer synthetischen Controller-Ebene führen würde.

Schauen Sie sich diesen Link an:

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

Mohamed Ennahdi El Idrissi
quelle
1
Genau so sehe ich auch die Serviceschicht. Aber dann sehe ich meistens, dass es verwendet wird, um externe APIs in das Geschäftsmodell einzubinden. Beide Szenarien sehe ich als gültig an. Das Problem liegt hier nur im Konflikt der Nomenklatur.
burntblark
2

Strukturell sind diese Basisklassen gleich, sie werden jedoch verwendet, um unterschiedliche Belange der Service- und Modellstufen der MVCS-Implementierung zu klassifizieren

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

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

Während die Basisklassen gleich sind, dienen die konkreten Klassen, die durch die Erweiterung dieser Basisklassen erstellt werden, zwei völlig unterschiedlichen Zwecken.

Sagar Awasthi
quelle