Ich plane derzeit eine Anwendung, die in einem Unternehmen verwendet wird. Es ist erforderlich, eine Desktop-Anwendung zu erstellen. Derzeit sind sie sich nicht sicher, ob die Anwendung in naher Zukunft auf Mobilgeräten oder im Browser verfügbar sein soll.
Ich habe zwei Möglichkeiten:
Greifen Sie direkt über die Desktop-Anwendung auf die Datenbank zu
Erstellen Sie eine REST-API und stellen Sie eine Verbindung dazu her
Kann ich eine REST-API verwenden, wenn die Anwendung nur eine Desktop-Anwendung im Unternehmen bleibt? Ich weiß, dass es möglich ist, aber ist es "der richtige" Weg? (Empfohlene Vorgehensweise)
Es gibt einige (mögliche) Vor- und Nachteile beim direkten Erstellen einer REST-API:
Nachteile:
- Die Entwicklung dauert länger
- Komplexer
- Der Server erledigt mehr Arbeit
- Sicherheitsprobleme
- Langsamer? (Der Server und die Desktop-Anwendung befinden sich im selben Netzwerk.)
Vorteile:
- Die Migration auf andere Plattformen ist einfacher
- Die Geschäftslogik wird auch benötigt, wenn Sie die Datenbank direkt aufrufen. Die Entwicklung wird nicht mehr lange dauern
- Gleiches gilt für die Komplexität
- Sicherheit (wie von tkausl in den Kommentaren erwähnt)
- Wartbarkeit (wie von WindRaven in den Kommentaren erwähnt)
Security issues
als Nachteil für die REST-API?Antworten:
Wenn es um große Anwendungen mit einer riesigen Datenbank geht, die Millionen von Datensätzen enthält, werden Sie schnell feststellen, dass eine einfache Auswahl, Aktualisierung, Einfügung und Löschung einfach nicht ausreicht.
Sie fangen also an, anders zu denken. Sie erstellen Prozeduren und Trigger, um kompliziertere Dinge direkt in der Datenbank zu erledigen, und das ist nicht sehr gut. Datenbanken bieten eine hervorragende Leistung bei der Ausführung von CRUD-Operationen. Lange Prozeduren? Nicht so viel.
Das Problem mit den Verfahren
Stellen Sie sich nun vor, Sie wechseln zu einer Datenbank, die das Konzept der Prozeduren nicht unterstützt. Was wirst du machen? Sie sind gezwungen, die Prozeduren stattdessen in Ihre Codebasis zu verschieben, wo Sie ziemlich sicher sein können, dass sie nach dem Programmieren in Java immer dort bleiben, unabhängig davon, für welches Datenbankmodul Sie sich entscheiden.
Ganz zu schweigen davon, dass Ihre Prozeduren normalerweise Teil Ihrer Geschäftslogik sind und es keine gute Idee ist, Ihre Geschäftslogik auf Ihre Codebasis und Datenbank zu verteilen.
Idealerweise sollten Sie immer einen Vermittler zwischen der Datenbank und dem Client haben, der seine eigenen Geschäftsregeln implementiert. Der direkte Zugriff auf die Datenbank ist keine gute Idee, da derjenige mit Zugriff direkten Zugriff auf die Tabellen hat und mit den vorhandenen Daten so ziemlich alles tun kann.
Nachteile
Vorteile
quelle
Hier ist meine Meinung zu diesem Thema: Sie haben die richtige Idee, einen Webservice nutzen zu wollen, aber Sie planen möglicherweise, die falsche Technologie zu verwenden.
Wenn Sie REST sagen, gehe ich davon aus, dass Sie über Asp.Net WebApi sprechen. Das ist die falsche Technologie für Intranetanwendungen. REST & WebApi sind fantastisch, verstehen Sie mich nicht falsch, aber für jede Art von interner Anwendung sind WCF-Webdienste meiner bescheidenen Meinung nach der richtige Weg. Sie ermöglichen es dem Client, wie eine Klassenbibliothek auf den Service-Endpunkt zu verweisen. Dies bedeutet, dass Sie in Ihrem Desktop-Client nicht mit XML oder JSON arbeiten. Sie arbeiten mit Klassen und Objekten.
Wie auch immer, ja. Du hast die richtige Idee. Wenn sie nicht sicher sind, ob sie einen webbasierten Client benötigen, müssen Sie Ihr System so gestalten, dass es problemlos hinzugefügt werden kann, wenn sie später entscheiden, dass sie es möchten. Es ist viel einfacher, verschiedene Arten von Clients hinzuzufügen, wenn Sie eine serviceorientierte Architektur haben.
quelle
Schauen Sie sich es auf diese Weise, ist es auf jeden Fall ist ein gemeinsames Muster und realistischerweise als beste Praxis beschrieben.
Abhängig von Ihrer Plattform finden Sie möglicherweise Tools, mit denen das Problem fast behoben ist. Microsoft bietet ODATA-Unterstützung für verbundene Apps, mit denen Formulare über Daten hinweg problemlos erstellt werden können, sobald Sie die Lernkurve überschritten haben.
Pragmatischer: Definieren Sie die API, die Sie für Ihre Datenschicht benötigen, in der Desktopanwendung und codieren Sie diese API. Stellen Sie den gesamten Datenbankzugriff hinter diese API - was die Entwicklung im Hinblick auf die Entwicklung der Anwendung tatsächlich verbessert - und dann wird der Speicherort des tatsächlichen Datenbankzugriffscodes weniger wichtig (dieselbe API könnte durch Code implementiert werden, der direkt mit der Datenbank kommuniziert oder durch Code, der indirekt über einen Ruheendpunkt mit der Datenbank kommuniziert). Wenn Sie mit einer direkten Implementierung beginnen, wird die REST-Version im Wesentlichen ein Wrapper um dieselbe API sein, damit Sie nicht zu stark bestraft werden ...
Es ist wahrscheinlich nicht ganz so einfach, wie ich es mir vorstellen würde - aber es ist ein gutes Muster, es gibt Ihnen die Flexibilität, die Sie möglicherweise benötigen, ohne die YAGNI- Route weit zu gehen .
quelle