Wie vermeidet man fette Modelle in einer node.js + mongoose App?

8

Die App verwendet Express 3. Hier ist ein Barebone-Beispiel für eine Route, die Daten aus der Datenbank abruft:

%Vor%

Wo Posts.getSomeData als Instanzmethoden in /models/post.js definiert ist und manchmal auf externe APIs zugreift:

%Vor%

Das fängt an zu riechen und sieht nicht so aus, als gehöre es zur Schema-Definition. Die Sammlung von Methoden könnte ziemlich groß werden.

Welche Designmuster werden empfohlen, um diese Bedenken zu trennen und extrem fette Modelle zu vermeiden? Eine Service-Schicht für externe API-Aufrufe? Irgendwelche interessanten Lösungen da draußen?

    
Ricardo Tomasi 25.01.2013, 21:17
quelle

2 Antworten

1

Das riecht tatsächlich ein bisschen. Ich würde den Ansatz der Betrachtung Ihrer Web-App nur als eine Ansicht Ihrer Anwendung verwenden.

Der beste Weg, um dies sicherzustellen, ist nie verwenden Sie Ihre Mungo-Modelle aus Ihrer Webapp. Sie könnten Ihre Webanwendung in einem Prozess und Ihre modellspezifische Logik in einem anderen Prozess leben lassen. Die Aufgabe dieses zweiten Prozesses besteht darin, sich um Ihre Geschäftslogik und Persistenzschicht (mongoDB) zu kümmern und sie zu M in MVC zu machen.

Der Zugriff auf externe APIs würde in dieser Model-Schicht erfolgen, wir können sie von Ihrer Persistenz-Implementierung trennen.

Es gibt eine Möglichkeit, zwischen Knotenprozessen zu kommunizieren, die ich mag, es ist dnode . Einmal eingerichtet, sieht es so aus, als würden Sie mit Objekten und Rückrufen innerhalb Ihres eigenen Prozesses kommunizieren. Ich würde die Webapp und die Business-App dadurch kommunizieren lassen, um Daten zu bekommen. Die Webanwendung muss die tatsächlichen Daten nicht manipulieren und sendet stattdessen eine Nachricht an die Modellschicht (wie durch das MVC-Muster beschrieben).

Dies stellt eine vollständige Trennung zwischen Controller / View (Webapp) und Model + Persistenz sicher.

Ein Nebeneffekt dieser Organisation ist, dass Sie problemlos andere Clients Ihrer Anwendung schreiben können, zum Beispiel einen CLI-Client oder eine REST-konforme API.

    
Floby 05.02.2013 15:00
quelle
0

Versuchen Sie, ID und Somedata von URL (Post /: ID /: Somedata) zu bekommen? um ein Schema zu konstruieren?

Idealerweise sollte man verwenden:

%Vor%

Dies ist der Zeitpunkt, zu dem das Formular auf der HTML-Formularseite 'reg' eingereicht wird. Dort können Sie alle Variablen (Name, E-Mail) im Objekt festlegen. In app.post können Sie die Schemadefinition von der Anfrage selbst erhalten, ohne die URL zu durchsuchen, um Variablen zu erhalten.

Wenn Sie weiterhin wissen möchten, wie Sie die Variablen aus der URL abrufen können, tun Sie dies in app.get:

%Vor%

Nachdem Sie das Schema erhalten / erstellt haben, übergeben Sie es direkt an die Funktion / oder durchlaufen Sie die Objektelemente, die diese Funktion aufrufen.

    
user568109 07.02.2013 10:25
quelle