2012-12-02 3 views
21

Beginnen Sie einfach mit breeze.js wegen der offensichtlichen Gewinne in Codierungszeit, d. H. Verwalten von Modelldaten vom Server direkt in Javascript (Ich bin ein Neuling hier, also offensichtlich nackt mit!).Ist es nicht gefährlich, Abfrageinformationen in JavaScript mit brisejs zu haben?

In der Vergangenheit habe ich die Aktien-Ajax-Aufrufe verwendet, um Daten auf den Server zu bekommen/zu veröffentlichen, und ich habe einige verschiedene Client-Tools in der Vergangenheit verwendet, um Hilfe bei der Abfrage von lokalen Daten wie jLinq.

Meine Frage ist dies. Ist es nicht gefährlich, im Wesentlichen vollständigen Modellabfragezugriff in Javascript zu haben? Ich muss etwas vermissen, weil es wie ein wirklich gut durchdachtes Werkzeug aussieht. In der Vergangenheit habe ich zumindest kontrolliert, was über den Backend-Abfrageprozess an den Client gesendet werden kann, und wiederum mit etwas wie jLinq usw. Ich könnte die Daten usw. filtern. Ich kann auch den Kompromiss verstehen, vielleicht mit der direkten Abfrage/kein duplizierendes lokales Modellproblem, also nur wenn irgendjemand etwas Einblick geben könnte?

Danke!

EDIT Offensichtlich bin ich nicht die einzige, aber es ich bin zu raten, ist eine vernünftige Antwort - angefordert werden unter Verwendung von DTO Methoden oder etwas vielleicht die Daten zu begrenzen? The other question posted is here

+0

Gefährlich auf welche Weise? Enthält Ihr Modell vertrauliche Daten, die nicht dem Client zur Verfügung gestellt werden sollten? – David

Antwort

14

Es kann gefährlich sein, das vollständige Geschäftsmodell offenzulegen. Es kann gefährlich sein, die uneingeschränkte Abfrage auch nur eines Teils des Modells zuzulassen, den Sie dem Client zur Verfügung stellen möchten. Dies gilt unabhängig davon, ob Sie eine leicht abfragbare oder eine schwer abfragbare API anbieten.

Aus diesem Grund achten unsere Teams sorgfältig darauf, wie wir unsere Dienstleistungen aufbauen.

Sie sollten nur Typen angeben, die Ihre Client-App benötigt. Wenn Sie den Zugriff auf autorisierte Instanzen eines Typs beschränken möchten, können Sie sorgfältig vorgeschriebene, nicht abfragbare Servicemethoden schreiben. Breeze kann sie gut nennen. Sie müssen die Breeze-Abfragefunktionen nicht für jede Anforderung verwenden.Sie profitieren weiterhin von Caching, related-entity-navigation, Änderungsverfolgung, Validierung, Speichern-Bündeln, Cache-Abfrage, Offline-Unterstützung.

Wiederholen: Ihre Dienstmethoden müssen IQQueryable nicht zurückgeben. Auch wenn sie IQueryable zurückgeben, können Sie die Dienstmethode einfach so schreiben, dass die Abfrageergebnisse nur auf die Entitäten beschränkt werden, zu deren Anzeige der Benutzer berechtigt ist.

Glücklicherweise können Sie die beiden Ansätze in demselben Dienst oder in zusammenarbeitenden Diensten kombinieren.

Breeze gibt Ihnen Möglichkeiten. Es liegt an Ihnen, diese Entscheidungen weise zu treffen. Gehen Sie dorthin und entwerfen Sie Ihre Dienstleistungen, um Ihre Anforderungen zu erfüllen.

+2

Je mehr ich die Brise erforsche und natürlich die obigen Kommentare anwende (was natürlich den gesunden Menschenverstand ausmachen kann - einfach technische Lösungen als eine Art Zyklopenblick auf die Welt zu sehen!), Desto mehr bekomme ich ein verschwommenes warmes Gefühl endlich wird endlich die Browser- und Serverwelt zusammengebracht :) –

4

Breeze ist nicht zu be Ihre Geschäftslogik in diesem Sinne gemeint. Unter Berücksichtigung der Faustregel, dass, wenn Sie etwas in Javascript tun, jeder es tun kann, sollten Sie die Sichtbarkeit Ihrer eigenen Service-Daten bei Bedarf einschränken.

Mit anderen Worten, es ist nützlich für Sie, wenn Sie die Daten trotzdem öffentlich sichtbar machen wollten. Aber setze nur die Entitäten frei, die du gerne entblösst und die es jedem erlauben, Fragen zu stellen. Eine andere Möglichkeit, es zu betrachten, ist, dass Ihre API zu einer öffentlichen API für Ihre Website wird (aber nicht zu einer, die Sie bewerben und jeder dazu auffordern).

Ich bin persönlich nicht ein Fan der Dinge auf diese Weise tun, da es eine Abhängigkeit auf dem Schema der Back-End-Implementierung erstellt. Wenn ich Änderungen an meinen Datenbanktabellen vornehmen möchte, muss ich mein Javascript berücksichtigen. Es fehlt mir auch an Integration und Unit Testing.

Es kann jedoch seine Verwendung haben, wenn Sie schnell eine Website-Funktion für nicht sensible Daten erstellen möchten, ohne die Dienstmethoden und verschiedene Implementierungsebenen erstellen zu müssen.

+0

Hey gute Antwort, danke. Ich denke, ich dachte auf dem gleichen Weg, um nur die Daten, die Sie wirklich wollen, zu zeigen, dh wenn Ihr Modell eine Reihe von Eigenschaften hatte, einschließlich Objekten, die nicht extern sichtbar sein sollten, dann mit einem DTO nur die Elemente übertragen, die Sie sichtbar haben möchten . Ich glaube, ich wollte nur eine Bestätigung dafür bekommen, falls ich etwas verpasst hätte, also nochmals Danke für die Antwort. –

+4

Sie können sicherlich nur angeben, was Sie über DTOs in Ihrer Web-API haben möchten, dann kann Breeze nur auf diese zugreifen. Ich denke, das Thema von dir DB ändert wirklich nicht Wasser obwohl praktisch. Wenn Sie ein Feld zu einer Tabelle hinzufügen, müssen Sie Code in Ihren Geschäftsmodellen aktualisieren. Sie könnten wählen, Ihre DTOs nicht zu aktualisieren, und dann würden die Änderungen das JavaScript überhaupt nicht beeinflussen. Es gibt also Wege mit Trennungsmustern. –

+0

Ich denke, es hält Wasser; Datenbankänderungen sind nicht darauf beschränkt, nur eine Spalte zu einer Tabelle hinzuzufügen. Sie können eine Spalte entfernen, Tabellen verschieben, Tabellen aufteilen und DB-Provider ändern. Wenn ich eine API habe, möchte ich die Trennung beibehalten, so dass jede Änderung des Schemas den Client nicht beeinflusst. Nur wenn mein Schnittstellenvertrag eine Änderung erfordert, kann ich die API versionieren und den Client informieren. Dies ist die Trennung, die ein clientseitiges Abfragemodell erschwert. – Mendhak

4

Was ist, wenn Sie die Metadaten verfügbar machen? Ist das nicht gefährlich? IMHO ist nicht sicher, Metadaten aus dem DbContext verfügbar zu machen. Ich weiß, dass Sie Metadaten auf dem Client erstellen können, aber der Punkt ist, Dinge so schnell wie möglich zu tun (wenn sicher).

+1

Was macht die Metadaten gefährlich? Welche Art von Informationen gehören zu Ihren Sicherheitsrisiken? Nun, es ist am besten, auch geringe Risiken zu minimieren, wenn Sie dies zu vernünftigen Kosten tun können, ohne die Funktionalität zu beeinträchtigen. Zum Glück ist es ziemlich einfach w/r/t Typ Info. Sie müssen nicht Ihr gesamtes Geschäftsmodell offenlegen, sondern nur die auf dem Client zulässigen Typen. Die Beschränkung auf diese Typen kann so einfach sein wie die Begrenzung der Oberfläche von DbContext, um das Clientanwendungsmodell zu unterstützen. Und wenn die Objekte auf dem Client existieren, was sagen die Metadaten Ihnen, dass das Objekt auf dem Client nicht? – Ward

Verwandte Themen