Ich habe angefangen, eine App in drei Ebenen (DAL, BL, UI) zu erstellen [hauptsächlich CRM, einige Verkaufsberichte und Inventar].
Ein Kollege sagte mir, dass ich zum Service-Layer-Muster übergehen muss, dass Entwickler aufgrund ihrer Erfahrung zum Service-Muster gekommen sind und es der bessere Ansatz ist, die meisten Anwendungen zu entwerfen. Er sagte, es sei viel einfacher, die Anwendung in Zukunft auf diese Weise zu warten.
Persönlich habe ich das Gefühl, dass es die Dinge nur komplexer macht, und ich konnte keinen großen Nutzen daraus ziehen, der das rechtfertigen würde.
Diese App verfügt über eine zusätzliche kleine Teil-Benutzeroberfläche, die einige (aber nur wenige) Funktionen der Desktop-Anwendung verwendet. Ich habe also festgestellt, dass ich etwas Code dupliziert habe (aber nicht viel). Nur wegen einiger Code-Duplikate würde ich es nicht in Service-orientiertes umwandeln, aber er sagte, ich sollte es trotzdem verwenden, weil es im Allgemeinen eine sehr gute Architektur ist, warum Programmierer so leidenschaftlich für Services sind?
Ich habe versucht, darauf zu googeln, aber ich bin immer noch verwirrt und kann mich nicht entscheiden, was ich tun soll.
quelle
With CRM, Sales and Inventory there will be a lot of CRUD-type use cases of which there is almost always a one-to-one correspondence with Service Layer operations
- wenn es um mehrere Benutzeroberflächen geht, wie kommt die CRUD hier hinein? Und wenn ich nicht mehrere Benutzeroberflächen benötigen würde, obwohl die CRUD gut zu Diensten passt, würde ich immer noch keine Dienstebene erstellen, wenn ich das richtig verstehe Chaos zu meiner unerfahrenen Meinung)Hinzufügen einer Service-Schicht, weil Sie die Idee bewertet und den besten Ansatz gefunden haben: gut
Hinzufügen einer Serviceebene, weil all die coolen Kids das tun: schlecht
Wenn dein Bauch sagt, dass du keinen brauchst, dann mache keinen.
Eine der enttäuschendsten Entwicklungen in der Programmwelt in den letzten 10 Jahren ist, dass sie sich ärgerlich an der Mode orientiert und die Leute Trends und Bandwagons folgen, als wären sie Schuhe dieser Saison. Fallen Sie nicht in diese Falle. Denn in der nächsten Staffel wird dir "jeder" sagen, dass du es auf eine andere Art und Weise hätte gestalten sollen.
An einer Service-Schicht ist nichts falsch oder richtig - es handelt sich um einen bestimmten Ansatz, dessen Eignung in Bezug auf ihre technischen Vorzüge für das jeweilige Projekt bewertet werden sollte. Fühlen Sie sich nicht gezwungen, die Meinung anderer durch Ihr eigenes Urteilsvermögen zu ersetzen.
quelle
Es gibt viele Faktoren, die bei der Entscheidung für die Erstellung einer Serviceschicht eine Rolle spielen. Ich habe in der Vergangenheit aus den folgenden Gründen Serviceschichten erstellt.
Fall 1: Sie erstellen eine Basisfunktionalität, die von einer Vielzahl verschiedener Clients verwendet werden muss. Die Serviceschicht enthält Funktionen, mit denen verschiedene Clients die von Ihnen bereitgestellten Funktionen sofort nutzen können.
Fall 2: Sie hosten normalerweise Code im App-Bereich, verwenden jedoch eine Drittanbieter-Bibliothek, für die Sie nur eingeschränkte Lizenzen haben. In diesem Fall haben Sie eine Ressource, die Sie überall verwenden möchten, aber nur eine begrenzte Anzahl von ihnen. Wenn Sie es hinter einem Service hosten, kann Ihre gesamte Organisation es von ihren Anwendungen nutzen, ohne für jedes einzelne Hosting eine Lizenz erwerben zu müssen.
Fall 3: Sie erstellen Funktionen für die Kommunikation mit Dritten. In Ihrem Beispiel könnten Sie einen Inventar-Endpunkt einrichten, damit Anbieter Ihnen Nachrichten über eingehende Produktsendungen übermitteln können.
Fall 4: Sie haben Ihren Code unternehmensweit analysiert und festgestellt, dass separate Teams dasselbe erstellt haben (nur geringfügig anders implementiert). Mit einer Serviceschicht können Sie die besten Ansätze auswählen und jetzt können Sie den Prozess für alle Teams gleich implementieren, indem sie den Service aufrufen. Ein weiterer Vorteil der Zentralisierung von Logik besteht darin, dass Fehler gefunden werden. Jetzt können Sie das Update einmalig bereitstellen und alle Clients können gleichzeitig den Vorteil nutzen.
Vor diesem Hintergrund gibt es potenzielle Nachteile für eine Serviceschicht.
Der wichtigste Punkt ist, dass es nicht immer ein Knaller ist, Ihr System serviceorientiert zu machen. Nach meiner Erfahrung ist es normalerweise eine gute Idee (ich neige dazu, Anwendungen auf diese Weise zu strukturieren), aber es ist keine automatische Entscheidung. Am Ende des Tages müssen Sie die Vor- und Nachteile abwägen und die Entscheidung treffen, die für Ihre Situation richtig ist.
quelle
Die meisten Service-Layer, die ich gesehen habe, sind ein komplettes Durcheinander. Dienste haben in der Regel viele verschiedene Methoden, 1500 LOC sind keine Seltenheit. Die verschiedenen Methoden haben nichts gemeinsam, teilen aber Code. Dies führt zu einer hohen Kopplung und einer geringen Kohäsion . Dies verstößt auch gegen OCP , da Sie bei jeder neuen Operation den Code ändern müssen, anstatt die Codebasis zu erweitern. Eine gut aufgebaute Service-Schicht ist theoretisch möglich, aber ich habe sie in der Praxis nie gesehen.
CQRS löst diese Probleme und verhindert, dass Sie eine dieser prozeduralen Service-Ebenen erstellen müssen.
quelle
Das Hinzufügen einer Schnittstelle (eine Serviceschicht ist eine Art von Schnittstelle) erfordert Zeit. Ein guter braucht viel Zeit zum Entwerfen und Testen. Es ist sehr wichtig, es beim ersten Versuch richtig zu machen, da eine spätere Änderung alle Clients zum Erliegen bringt. Bedenken Sie auch, dass Sie wahrscheinlich nicht wissen werden, was in dieser Schnittstelle sein muss, bis Sie einen zweiten Client mit leicht unterschiedlichen Anforderungen haben. Die Aufrechterhaltung eines Dienstes ist ein nie endendes Projekt für sich.
Wenn Sie sich in den meisten Organisationen an Ihren Geschäftspartner wenden und ihn fragen: "Möchten Sie, dass andere Abteilungen von diesem System, das wir mit Ihrem Budget entwickeln, profitieren (es wiederverwenden)?" Sie werden dich auslachen. Lassen Sie es zuerst für Ihren Geschäftssponsor arbeiten, und fangen Sie dann an, mit der Wiederverwendung dieses Codes herumzuspielen (in der Zeit Ihrer Abteilung).
Wenn Sie sicher sind, dass die Funktionalität, die Sie heute schreiben, von mehreren verschiedenen Service-Clients wiederverwendet wird, sollten Sie ab dem ersten Tag einen Service-Layer entwerfen. Wenn Sie sich nicht sicher sind oder bereits viele Unbekannte im Projekt vorhanden sind, sollten Sie zunächst eine einfache Aufgabe erledigen und sie später in Service und Client aufteilen, wenn Sie Zeit und Budget haben. Wenn Sie mit einem funktionierenden System beginnen, ist es viel einfacher, die Serviceschnittstelle gleich beim ersten Versuch zu finden.
PS Wenn Sie in Java arbeiten, hat Joshua Bloch in seinem Buch „Effective Java“ viele fantastische Ratschläge für die Benutzeroberfläche.
quelle
Ich stimme mit Ihnen ein. Wenn Sie eine einzelne Benutzeroberfläche verwenden, müssen Sie keine weitere Ebene hinzufügen.
DAL, BL und UI / Controller sind eine gute Kombination zum Entwerfen einer Anwendung. Wenn Sie eine einzelne Benutzeroberfläche verwenden möchten, müssen Sie keine zusätzliche Ebene vorbereiten. Das Einfügen einer weiteren Schicht in die Anwendung erhöht nur den Entwicklungsaufwand / die Entwicklungszeit.
Eine weitere Möglichkeit besteht darin, mehrere Benutzeroberflächen in Ihrer Anwendung zu verwenden. In diesem Fall ist es hilfreich, über eine Service-Schicht zu verfügen, die die Benutzeroberflächen verwaltet.
Stapelüberlauf: Diskussion über das Service-Layer-Muster
quelle
Ich würde bestreiten, dass Ihre BL Ihre Service-Schicht ist. Ein zentraler Ort, an dem sich Ihre Geschäftslogik befindet. Dies sollte eine DLL sein, die von allen verwendet werden kann, die diese Logik benötigen. Dann können Sie eine Web-API-Ebene darüber legen, wenn Ihre App andere Benutzeroberflächen hat.
quelle