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.
Antworten:
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.
quelle
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
quelle
Strukturell sind diese Basisklassen gleich, sie werden jedoch verwendet, um unterschiedliche Belange der Service- und Modellstufen der MVCS-Implementierung zu klassifizieren
Während die Basisklassen gleich sind, dienen die konkreten Klassen, die durch die Erweiterung dieser Basisklassen erstellt werden, zwei völlig unterschiedlichen Zwecken.
quelle