Zwar gibt es viele Denkschulen, und sicherlich kann kein Weg allgemein als "der richtige Weg" bezeichnet werden, während alle anderen allgemein als "der falsche Weg" bezeichnet werden. Es gibt jedoch eine Reihe von Gründen, die Geschäftslogik auf der Serverseite zu isolieren und Zugriff auf diese Objekte und Dienste über einen RESTful-Dienst.
Die kurze Antwort lautet, dass es hauptsächlich um Risikomanagement sowie Leistungsüberwachung und -verbesserung geht.
Im Detail:
Der Hauptgrund Nummer 1 ist die Sicherheit. Den Kunden sollte niemals vertraut werden, dass sie etwas anderes als Müll an den Server senden. Wenn Sie die Sicherheitsaspekte auf der Serverseite beibehalten, können Sie das potenzielle Risiko eines betrügerischen Benutzers, der Ihr System beschädigt, eingrenzen. Denken Sie daran, dass Javascript vollständig clientseitig und trivial veränderbar ist, sodass Sie dem Ergebnis nicht vertrauen können.
Der Hauptgrund Nummer 2 ist die Trennung von Bedenken. Ihr Javascript-Programmierer ist möglicherweise kein Experte für Sicherheit, und Ihr Sicherheitsguru ist möglicherweise nicht so gut in Javascript. Indem Sie die Geschäftslogik von der Präsentationslogik isolieren, vermeiden Sie, diese Bedenken zu überschreiten, da das Javascript nicht auf Ressourcen zugreifen darf, die über seine Berechtigungsstufen hinausgehen, und Fehler erhalten, deren Behandlung im Rahmen des Skriptprogrammierers liegt. Ebenso wird der Sicherheitsmann kein Javascript debuggen, um zu sehen, wie die Sicherheit aufrechterhalten wird.
Der Grund Nummer 3 ist die Leistung. Geschäftslogik kann möglicherweise Server- und Datenbankressourcen beanspruchen. Indem Sie diese Logik von Ihren UI-Elementen isoliert halten, können Sie nur diesen Teil Ihrer Anwendung skalieren, wodurch Engpässe viel einfacher behoben werden können. Darüber hinaus ist es viel einfacher zu isolieren, welcher Geschäftsprozess Ihr System- oder Datenbank-Backend lädt, wenn die Geschäftsprozesse auf dem Server ausgeführt werden.
Eine Folge davon ist, dass häufig mehrere Geschäftsprozesse dieselben Daten verwenden. Daher können Sie das Caching auf der Serverseite implementieren, um die Gesamtsystemlast zu reduzieren, die möglicherweise nicht möglich / sicher ist, um clientseitigen Codezugriff zu ermöglichen.
Schließlich würde ich vorschlagen, dass Business Logic wirklich auf dem Server sein muss, um die ACID-Standards aufrechtzuerhalten. Ich erinnere mich, dass ich ein Abrechnungsprodukt gepflegt habe, das im Webbrowser ausgeführt wurde und nur eine Datenbankverbindung zum Server hatte. Wenn die tägliche Abrechnung (die an einem guten Tag eine Stunde oder länger dauern kann!) Unterbrochen wurde, z. B. weil der Browser geschlossen wurde oder abstürzte, konnte es mehrere Stunden dauern, bis das Chaos in der verbleibenden Datenbank behoben war in einem inkonsistenten Zustand. Denken Sie daran, dass dies auch Kreditkarten betraf, sodass die Abrechnungsunterlagen auch mit dem Verarbeiter verglichen werden mussten!
Die serverseitige Geschäftslogik ist meistens trivial, um ACID-Aktualisierungen sicherzustellen, da es Frameworks für jede Sprache gibt, um Transaktionen entweder auf Anwendungs- oder Datenbankebene zu verwalten. Wenn Sie dies über mehrere Updates von einem Webclient tun, erhalten Sie irgendwann einen inkonsistenten Status, der sich wahrscheinlich auf Ihre Anwendung auswirkt.
Während es verlockend sein kann, sich RESTful-Services einfach als eine Möglichkeit für den Zugriff auf die Datenbank vorzustellen, sollten Sie nicht in diese Falle tappen, da dies ein gutes Rezept für eine Katastrophe ist. Das Objektmodell, das Sie über einen RESTful-Service verfügbar machen, kann sich auf Ihre Datenbank beziehen, sollte jedoch Ihre Geschäftslogik wirklich kapseln, anstatt sie nur als CRUD-Engine zu verwenden.