Wo kann man Geschäftslogik platzieren, wenn man Firebase verwendet?


10

Ich bin dabei, eine einseitige Webanwendung zu entwickeln, die ein Mehrbenutzer-Dokumentationssystem sehr vereinfacht. Das Frontend wird wahrscheinlich Angular2 verwenden.

Das Projekt hat eine kurze Frist, daher habe ich nach "Verknüpfungen" gesucht, dh nach verschiedenen vorgefertigten Diensten, anstatt alles von Grund auf neu zu implementieren.

Ich benötige eine Art Backend, um die Anwendungsdaten zu speichern. Ich habe mich umgesehen und Firebase gefunden, was die Arbeit beim Erstellen eines separaten Backends und einer API für die Kommunikation mit dem Frontend zu vereinfachen scheint.

Das bedeutet aber auch, dass ich die Geschäftslogik in der Angular2-Web-App in das Frontend stellen müsste, oder?

Wenn ich also eines Tages ein Frontend für mobile Apps erstellen möchte, müsste ich den Geschäftslogikcode duplizieren?

Ich denke, die Alternative wäre, ein Backend zu erstellen, das die Geschäftslogik enthält und Firebase für die Datenspeicherung verwendet, aber das scheint etwas seltsam (könnte ich nicht einfach ein ORM oder etwas direkt in meinem Backend verwenden, um das gleiche Ergebnis ohne zu erzielen viel mehr Arbeit?)

Wie strukturieren Menschen diese Art von Apps normalerweise, wenn sie beispielsweise Firebase nutzen möchten?


Mit welcher Datenbank / Orm usw. sind Sie am besten vertraut? Das bringt Sie wahrscheinlich am schnellsten dorthin.
Robert Harvey

Für dieses Projekt würde ich wahrscheinlich einige Technologien verwenden, die ich vorher noch nicht verwendet habe, also würde es so oder so etwas lernen ...
Magnus W

Benötigen Sie nur Datenspeicherung oder möchten Sie auch die Sofort-Push-Funktion nutzen? Wenn Sie dies nicht als Geschäftslogik betrachten, kann jede Front-End-Technologie dies direkt mit ihrem eigenen Verbindungscode verarbeiten. Ich bin mir nicht sicher, ob ein ORM dies tun wird.
JeffO

Antworten:


2

F: Das bedeutet aber auch, dass ich die Geschäftslogik in das Front-End der Angular2-Web-App einfügen müsste, oder ?

Ja. Wenn es nicht von einem Server unterstützt wird, sollte das Unternehmen irgendwo implementiert werden.

Nach der Übernahme von Google entwickelte sich Firebase zu einer Plattform für Entwickler mobiler Apps, die es sich nicht leisten konnten (oder müssen), ein eigenes Backend bereitzustellen. Während die meisten Dienste ziemlich transversal sind: Speicher-, Anmelde-, Analyse- und Nachrichtendienst, bietet es zwar auch Cloud-Funktionen (Art von Lambdas), mit denen einige geschäftsspezifische Regeln ausgeführt werden können. Für Unternehmensanwendungen oder große Anwendungen mit einer komplexen Domäne und Geschäftslogik ist diese Art der Unterstützung jedoch unzureichend.

Wie Sie vielleicht erraten haben, befreit uns Firebase nicht davon, dass das Backend für das Hosten und Ausführen geschäftsspezifischer Vorgänge vorgesehen ist.

F: Wenn ich eines Tages ein Front-End für mobile Apps erstellen möchte, muss ich den Geschäftslogikcode duplizieren.

Nicht unbedingt. Wenn die Web-App auf Angular basiert, können Sie mit plattformübergreifenden Funktionen wie NativeScript möglicherweise die Webkomponenten, Bibliotheken, Dienstprogramme, Modelle usw. wiederverwenden. Ich habe mich nicht mit dem Thema befasst, daher kann ich Ihnen keine vollständige Kompatibilität garantieren. Der Schlüssel liegt in TypeScript . Sowohl Angular als auch NativeScript erfordern, dass wir auf TS codieren.

Die Sache ist dann, wo das Javascript für seine Verteilung und Versionierung gehostet werden soll . Ein Wort CDN .

F: Ich denke, die Alternative wäre, ein Backend zu erstellen, das die Geschäftslogik enthält und Firebase für die Datenspeicherung verwendet, aber das scheint etwas seltsam (könnte ich nicht einfach ein ORM oder etwas direkt in meinem Backend verwenden, um dasselbe zu erreichen Ergebnis ohne viel mehr Arbeit?)

Einige Überlegungen.

Einerseits ist das Hosten, Ausrollen, Verwalten und Verwalten einer Datenbank keine Kleinigkeit. Ganz zu schweigen von Sicherheit, Skalierbarkeit, Verfügbarkeit usw. Es ist also interessant, einen DB-Anbieter zu haben, der sich um diese Dinge kümmert. Es ist heutzutage keine verrückte Idee, unsere Datenbank irgendwo in der Cloud zu haben. Natürlich würde ich dies nicht vorschlagen, wenn wir die Middleware und die Backends für eine Bank implementieren würden. Dies kann jedoch für die Sitzung des Kunden, die Benutzerprofile, die Einstellungen und diese Art von Daten, die normalerweise auf der Client-Seite gespeichert sind, oder für Daten, die uns nicht interessieren, sinnvoll sein.

Auf der anderen Seite ist es aus einem einfachen Grund nützlich, unser Backend zu haben, nämlich die Entkopplung .

Anstatt unsere Kunden an alle Arten von Diensten zu koppeln, die wir nicht verwalten und steuern, stellen wir eine serverseitige Anwendung bereit, von der aus wir uns um diese Dinge kümmern, damit sich unsere Kunden nicht um Probleme wie das Herunterfahren von Diensten oder das Unterbrechen von Diensten kümmern müssen Änderungen. Darüber hinaus gewinnen wir an Einfachheit, da unser Backend wie eine Fassade wirkt.

F: Wie strukturieren Menschen diese Art von Apps normalerweise, wenn sie beispielsweise Firebase nutzen möchten?

Es ist von Projekt zu Projekt sehr unterschiedlich. Zum Beispiel verwenden wir Firebase + Backend.

  • Firebase DB zum Freigeben von Daten zwischen Gerätekonten-Sitzungen . Auch als Änderungsprotokoll senden Clients die Schreibvorgänge an das Protokoll, das später synchronisiert wird, wenn unser Backend vorübergehend nicht verfügbar ist.

  • Firebase Cloud Messages bietet uns Upstream- / Downstream-Push-Benachrichtigungen und -Themen. Wir nutzen den Service für den Austausch von Pub- / Subnachrichten.

  • Firebase-Analyse Hauptsächlich für Metriken.

  • Backend für alles, was eng mit dem Geschäft zu tun hat


1

Kurze Antwort: Verwenden Sie keine Geschäftslogik.

Lange Antwort: Sie beschreiben eine Anwendung, die klein genug erscheint, um keine separate Geschäftslogik zu haben. bewerten Sie, ob Sie überhaupt eine solche Geschäftslogik haben; Ein Großteil der Geschäftslogik kann durch das Daten-Design und ein wenig durch die Präsentationsschicht reduziert werden. Viele kleine Systeme sind meistens CRUD und haben keine echte Geschäftslogik. Oft habe ich zwei oder drei Klassenebenen gesehen, die nur Passthrough-Objekte sind und Raum für eine Zukunft lassen, die niemals eintreffen wird.

Sie können mit einer API direkt aus Firebase heraus beginnen und später eine zusätzliche Ebene für die Geschäftslogik einführen, wenn Sie feststellen, dass ein wirklicher Bedarf dafür besteht, solange Sie Ihren Vertrag so gut gestalten, dass der Service eine stabile Signatur behält, während der Implementierung dahinter kann sich ändern.


Kann ich nicht sagen, da ich damit einverstanden bin. Ich habe 20 Jahre in dieser Branche gearbeitet und an meinem Anteil an kleinen CRUD-Anwendungen gearbeitet, aber es gibt fast immer eine Geschäftslogik. Auch wenn es sich nur um benutzerdefinierte Validierungen oder Steuerberechnungen handelt, gibt es immer etwas.
Jules

Ich stimme Ihrem Kommentar zu. Ich sage nicht, dass es keine Geschäftslogik gibt; Ich sage, dass es nicht groß genug ist, um eine separate Schicht zu verdienen. Ich würde behaupten, ob diese Validierungen oder Berechnungen wirklich zu einer Geschäftsschicht und nicht zu einer Daten- oder Präsentationsschicht gehören (insbesondere benutzerdefinierte Validierungen stimmen in der Regel mit meiner Definition der Datenlogik überein), aber es geht nicht darum, puristisch zu sein, wo sie klassifiziert werden sollen, sondern pragmatisch, wo man es codiert.
Bruno Guardia

0

Siehe /programming/54994228/how-to-minimise-firebase-function-latency

Cloud Firestore ist die primäre und einzige Verbindung zwischen Front-End und Back-End. Natürlich kann sich eine gewisse Logik im Front-End befinden, aber aus Sicherheitsgründen kann dies normalerweise nur offline zum Nutzen des Benutzers sein. Sie sollten die Sicherheit in den Cloud Firestore-Sammlungen selbst implementieren und die Rollen oder was auch immer Sie benötigen.

Verwenden Sie dann Cloud-Funktionen, die von einem Cloud Firestore-Trigger aufgerufen werden.

Sie sollten niemals eine Cloud-Funktion von einer Front-End-Anwendung aus aufrufen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.