7 Schlüssel zur Strukturierung Ihrer Node.js-App

Rahul Mhatre ist technischer Architekt bei Built.io.

Node.js holt Java, Ruby, Python und .Net als bevorzugte Sprache für die Entwicklung neuer Webanwendungen schnell ein. Das Node.js-Team macht die JavaScript-Laufzeit mit jedem Tag besser, schneller und solider. Und die Benutzergemeinschaft wächst rasant.

Mit zunehmender Akzeptanz werden immer mehr Entwickler die Node.js-Lernkurve erklimmen, sich ähnlichen Problemen stellen und ähnliche Funktionen codieren. Zum Glück ist die Node.js-Community mit Frameworks und Entwurfsmustern zur Rettung gekommen, die nicht nur häufig auftretende Probleme lösen, sondern auch bei der Strukturierung von Anwendungen helfen.

Frameworks implementieren im Allgemeinen MV-Muster wie MVC (Model-View-Controller), MVVM (Model-View-View-Modell), MVP (Model-View-Presenter) oder nur MV. Außerdem erfahren Sie, wo sich der Code für Modelle, Ansichten und Controller befinden sollte, wo sich Ihre Routen befinden sollten und wo Sie Ihre Konfigurationen hinzufügen sollten. Viele junge Entwickler und Node.js-Enthusiasten verstehen nicht wirklich, wie Entwurfsmuster oder OOP-Diagramme (Object Oriented Programming) den Linien oder der Struktur des Codes in ihrer Anwendung zugeordnet werden.

Hier kommen Node.js Frameworks wie Express.js und Sails.js ins Spiel. Diese und viele andere stehen zur Verfügung, um die Entwicklung von Webanwendungen voranzutreiben. Unabhängig vom verwendeten Framework sollten Sie bei der Strukturierung Ihrer App bestimmte Überlegungen berücksichtigen.

Hier sind die sieben wichtigsten Punkte, die ich in Betracht ziehe, bevor ich eine Node.js-Anwendung zuordne.

1. Die richtige Verzeichnisstruktur für die App

Bei der Auswahl der Verzeichnisstruktur für Ihre App sollten Sie das von Ihnen gewählte Entwurfsmuster berücksichtigen. Dies hilft beim Onboarding, beim Auffinden von Code und beim schnelleren Isolieren von Problemen. Ich persönlich bevorzuge die Verwendung eines MVC-Musters bei der Erstellung einer Node.js-App. Es hilft mir, mich schneller zu entwickeln, bietet Flexibilität beim Erstellen mehrerer Ansichten für dieselben Daten und ermöglicht die asynchrone Kommunikation und Isolation zwischen MVC-Komponenten, um nur einige zu nennen.

Ich folge gerne der oben gezeigten Verzeichnisstruktur, die auf einer Kombination von Ruby on Rails und Express.js basiert.

In Verbindung stehendes Video: Node.js Tipps und Tricks

In diesem Erklärvideo lernen Sie verschiedene Techniken kennen, mit denen Sie Ihre Erfahrung in der Knotenentwicklung verbessern können.

2. Zuordnung von ER-Diagrammen zu Modellen

Wie in Techopedia definiert, ist „ein Entity-Relationship-Diagramm (ERD) eine Datenmodellierungstechnik, die die Entitäten eines Informationssystems und die Beziehungen zwischen diesen Entitäten grafisch darstellt.“ Ein ER-Diagramm beschreibt die verschiedenen Entitäten, die an unserem System teilnehmen werden, und definiert alle Interaktionen zwischen ihnen so, dass:

  • Alles, was ein abstraktes oder physisches „Ding“ ist, wird zu einer Einheit in einem Modell
  • Ein Modell wird einer Tabelle in unserer Datenbank zugeordnet
  • Ein Attribut oder eine Eigenschaft einer Entität wird in ein Attribut eines Modells übersetzt, das wiederum eine Spalte in einer Tabelle ist

Wenn Ihre Entität beispielsweise ein Benutzer ist, ist das entsprechende Modell ein „Benutzer“ mit Attributen wie Vorname, Nachname und Adresse in der Datenbank sowie einer entsprechenden Tabelle und Spalten.

Die Verwendung einer einfachen Datenarchitektur macht es ziemlich einfach, das Wachstum Ihrer Datenbank und Ihrer Dateien jedes Mal zu verfolgen, wenn ein neues Schema erstellt wird.

3. Verwenden des MVP-Musters

Das Implementieren von MVC bedeutet nicht nur das Erstellen von Ordnern für Controller, Ansichten und Modelle. Sie müssen Ihren Code und Ihre Logik auch nach MVC aufteilen. Der Code in Ihren Modellen sollte streng auf Datenbankschema-Definitionen beschränkt sein. Entwickler vergessen im Allgemeinen, dass die Modelle auch Code enthalten, der CRUD-Operationen ausführt. Außerdem sollte jede Funktion oder Operation, die für dieses Modell spezifisch ist, in dieser Datei vorhanden sein. Der größte Teil der Geschäftslogik, die sich auf ein Modell bezieht, sollte sich in dieser Datei befinden.

Ein häufiger Fehler besteht darin, die gesamte Geschäftslogik in Controllern abzulegen. Controller sollten nur Funktionen von Modellen oder anderen Komponenten aufrufen, Daten zwischen Komponenten übertragen und den Ablauf der Anforderung steuern, während der Ansichtsordner nur Code zum Konvertieren von Objekten in für Menschen lesbare Form enthalten sollte. In der Ansicht sollte keine Logik wie das Formatieren von Daten oder das Sortieren oder Filtern durchgeführt werden. Wenn Sie die Ansichten sauber halten, erhalten Sie nicht nur eine bessere Benutzererfahrung, sondern können auch Ansichten ändern, ohne andere Komponenten zu ändern.

4. Aufteilen der Logik in Module

Als Entwickler wird uns immer gesagt, dass wir Code in Dateien und Modulen organisieren sollen. Dies bedeutet nicht, dass wir versuchen sollten, die gesamte App in eine einzige Datei zu integrieren. Die Aufteilung Ihres Codes nach Logik und Funktionalität ist der beste Ansatz. Das Gruppieren von Funktionen, die sich auf eine einzelne Entität oder ein einzelnes Objekt beziehen, in einer einzelnen Datei und das Organisieren der Verzeichnisstruktur basierend auf Logik hat viele Vorteile. Erstens wird viel Zeit gespart, um festzustellen, welche Funktion berührt werden muss, wenn ein Fehler behoben werden muss. Zweitens hilft es, alle Komponenten in der Architektur zu entkoppeln, wodurch das Ersetzen diskreter Funktionen erleichtert wird, ohne dass andere Codezeilen geändert werden müssen. Drittens hilft es auch beim Schreiben von Testfällen.

5. Die Bedeutung von Testfällen

Es ist sehr wichtig, beim Erstellen von Testfällen niemals Abstriche zu machen - Tests sind die Hüter Ihrer Codebasis. Wenn Ihre Anwendung wächst, wird es schwieriger, sich alle Szenarien zu merken, die Sie beim Codieren abdecken müssen. Testfälle helfen Ihnen dabei, Ihre Codebasis stabil zu halten. Das Testen verhindert eine Regression und spart wertvolle Entwicklungszeit und -aufwand. Es hilft Ihnen sicherzustellen, dass neue Funktionen fehlerfrei übertragen werden. Es hilft auch, die Codequalität zu verbessern, indem Fehler erkannt werden, bevor sie in die Produktion gehen. Und vor allem hilft das Testen dabei, das Vertrauen zu schaffen, dass der Code nicht abstürzt.

6. Die Bedeutung von Protokollen

Protokolle sind nützlich, um den Status Ihrer Anwendung zu debuggen und zu verstehen. Sie bieten wertvolle Einblicke in das Verhalten der App. Hier ist eine kurze Liste von Dingen, die Sie bei der Nutzung von Protokollen beachten sollten:

  • Finden Sie die richtige Balance, wenn es um die Protokollierung geht. Es ist nie schlecht, „zu viele Informationen“ zu haben, aber eine Überprotokollierung macht Ihre Arbeit nur schwieriger. Nadeln sind in kleineren Heuhaufen leichter zu finden. Auf der anderen Seite führt eine Unterprotokollierung dazu, dass zu wenig Informationen zum Debuggen oder Diagnostizieren verfügbar sind.
  • Teilen Sie Ihre Offline- und Online-Protokolle auf, wobei die neuesten Protokolle zum schnellen Abrufen und Verarbeiten aufbewahrt werden, während die älteren Protokolle archiviert oder in Dateien gespeichert werden.
  • Berücksichtigen Sie die Häufigkeit und Dauer Ihrer Protokolle, da sich dies auf die benötigte Speichermenge auswirkt. In den meisten Fällen sind die benötigte Speichermenge und die Anzahl der vorhandenen Protokolle direkt proportional.

Denken Sie daran, keine vertraulichen Daten wie E-Mail-IDs, Passwörter, Kreditkarteninformationen und Telefonnummern zu protokollieren. Es ist nicht nur ein großes Sicherheitsrisiko, sondern oft auch illegal.

7. Wird die Anwendung skaliert?

Der schlechteste Ansatz für die Anwendungsentwicklung besteht darin, darüber nachzudenken, wie Sie skalieren können, nachdem Sie Datenverkehr gewonnen haben. Stattdessen sollten Sie eine Architektur erstellen, die von Anfang an wachsen kann, um Zeit zu sparen und die Produktivität zu steigern.

Das Hochfahren von Servern skaliert nicht. Lastverteilung auf Ressourcen ist. Dies bedeutet nicht, dass Sie keine neuen Server erzeugen sollten, wenn die Last zunimmt. Zunächst sollten Sie den Lastausgleich in Ihren aktuellen Ressourcen einrichten, um die erhöhte Last zu bewältigen. Wenn der Lastausgleich die Arbeitslast nicht effizient verwalten kann, ist es Zeit, mit der horizontalen Skalierung zu beginnen und neue Server zu erzeugen. Sie können dies durch einen unabhängigen zustandslosen Prozess oder über Module erreichen. Jeder Prozess oder jedes Modul arbeitet isoliert und unabhängig. Dies hilft nicht nur bei der effizienten Skalierung Ihrer Anwendung, sondern macht Ihr System auch fehlertolerant und einfach wiederherzustellen.

Die Strukturierung einer Webanwendung ist ebenso wichtig wie die Auswahl der richtigen Technologie. Wenn die Fundamente fehlerhaft sind, stürzt die Anwendung möglicherweise ab oder lässt sich nicht skalieren oder startet in einigen Fällen überhaupt nicht. Beeilen Sie sich niemals mit der Entwicklung neuer Funktionen oder Ideen ohne ordnungsgemäße Planung und Architektur. Eine schlechte Struktur oder Architektur ist wie eine tickende Zeitbombe, die darauf wartet, explodiert zu werden.

Das New Tech Forum bietet einen Ort, an dem Sie neue Unternehmenstechnologien in beispielloser Tiefe und Breite erkunden und diskutieren können. Die Auswahl ist subjektiv, basierend auf unserer Auswahl der Technologien, die wir für wichtig und für die Leser von größtem Interesse halten. akzeptiert keine Marketingmaterialien zur Veröffentlichung und behält sich das Recht vor, alle eingebrachten Inhalte zu bearbeiten. Senden Sie alle Anfragen an [email protected]