4 Stimmen

Strategien für eine "Always-Connected"-Windows-Client-Datenarchitektur

Lassen Sie mich beginnen, indem Sie sagen: Dies ist mein 1. Beitrag hier, dies ist ein bisschen lenghty, und ich havent getan Windows Forms Entwicklung in Jahren....with, dass im Verstand bitte entschuldigen Sie mich, wenn dies nicht direkt eine Programmierung Frage und bitte mit mir, wie ich wirklich die Hilfe brauchen!!!

Ich wurde gebeten, eine Windows Forms-Anwendung für unser Unternehmen zu entwickeln, die mit einem zentralen (lokalen Netzwerk) Linux-Server kommuniziert, der eine PostgreSQL-Datenbank hostet. Die Anwendung soll es Benutzern ermöglichen, sich am System zu authentifizieren und anschließend die üblichen Transaktionen mit der PG-Datenbank durchzuführen. Normalerweise würde ich vorschlagen, eine Webforms-Anwendung für Mono zu schreiben, aber die Clients müssen lokale Ressourcen wie USB-Peripheriegeräte nutzen, so dass das nicht in Frage kommt. Auch wenn es vielleicht nicht klar erscheint, meine Fragen sind kursiv unten:

Dilemma Nr. 1:

Die Anwendung ist dafür gedacht, immer verbunden zu sein. Wie sollte ich meine DAL/BLL strukturieren - sollte sie auf dem Server oder auf dem Client liegen? ?

Dilemma Nr. 2:

Ich habe mich informiert über Client-Anwendungsdienste (CAS) und es scheint sich hervorragend für die Authentifizierung zu eignen, da alles über URIs zugänglich ist. Ich weiß, dass es einen .NET Data Provider für PostgreSQL gibt, aber Ich bin mir nicht sicher, ob CAS auf einem Linux (Debian)-Server funktionieren wird. ? Glauben Sie mir, ich würde mir die Hände schmutzig machen und es selbst versuchen, aber ich muss mir erst einen logischen Entwurf ausdenken, bevor mir Ressourcen für "Versuchszwecke" zur Verfügung gestellt werden!

Dilemma Nr. 3:

Wenn sich die DAL/BLL auf dem Server befinden soll, gibt es dann eine Möglichkeit, Datendienste zu erstellen und nur diese Dienste für authentifizierte Clients zugänglich zu machen? Es gibt eine (Sicherheits-)Anforderung, wonach eine Verbindungszeichenfolge mit Benutzernamen und Kennwort zur Datenbank nicht auf Client-Rechnern vorhanden sein darf... selbst wenn die Sicherheit auf der Datenbankseite ziemlich streng ist. Ich vermute, dass der einzige Weg für diese zu arbeiten wäre, die verschiedenen CRUD-Datendienst-Methoden zu erstellen, die von einem ASP.NET app ausgesetzt sind, und haben die WindowsForms machen eine Anforderung für Daten oder persistieren Daten an die ASP.NET app (durch eine URI) und haben, dass ein Resultset oder Wert zurückgeben. Liege ich mit dieser Vermutung richtig? Sollte ich WCF Data Services in Betracht ziehen? und wird WCF mit einer Nicht-SQL Server-Datenbank funktionieren?

Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu lesen, aber Sie sollten wissen, dass ich dringend jeden Rat in dieser Sache suche! TAUSEND DANK!!!!

EDIT:

Ich erwäge auch NHibernate als meine ORM verwenden

0 Stimmen

Die URL für den PostgreSQL .NET-Datenanbieter lautet: npgsql.projects.postgresql.org

0 Stimmen

Was genau meinen Sie, wenn Sie sagen "immer verbunden"?

1 Stimmen

Ich meine, dass im Gegensatz zu einem Smart-Client, der gelegentlich verbunden ist (z. B. mit einem zentralen DB-Server), aufgrund der geschäftlichen Anforderungen dieser Anwendung immer eine Verbindung zu Live-Daten bestehen muss - sonst kann der Benutzer nicht fortfahren. "Wenn die Person mit etwas beschäftigt ist und die Verbindung aus irgendeinem Grund abbricht, dann ist das schade" ... um unseren Analysten zu zitieren! Ja, das ist die Mentalität, mit der ich mich abfinden muss!

0voto

Chris Travers Punkte 23990

Einige Teile Ihrer Fragen sind kompliziert und übersteigen mein Fachwissen. Aber im Allgemeinen kann man fast alles machen, was man sich vornimmt, abgesehen vom GAP-Theorem und dergleichen.

DAL/BLL-Sachen im Allgemeinen können in jeder der Ebenen untergebracht werden. Ich habe vieles davon in meiner Datenbank und einiges in der mittleren Schicht untergebracht, um die Wiederverwendung in verschiedenen Umgebungen zu ermöglichen, was für Sie ein Ziel sein kann oder auch nicht. Die Sache ist die, dass ich hier sorgfältig über die Trennung von Belangen nachdenken würde und darüber, welche Art von Zentralisierung der Logik Sie platzieren wollen. Je weiter hinten, desto wiederverwendbarer wird es, aber das ist nicht immer ein kostenloser Kompromiss.

Ich bin nicht ganz vertraut mit CAS, aber was ich auf der MSDN-Website gesehen habe, sah nach AJAX aus. Das könnte falsch sein, aber wenn es richtig ist, dann haben Sie ein Problem, dass solche Anfragen zustandslos sein können und dies könnte ein Problem sein, wenn Sie eine konstante Verbindung benötigen.

Im Großen und Ganzen klingt es nach dem, was Sie sagen, am saubersten, eine zweistufige statt einer dreistufigen Anwendung zu machen, und die DAL/BLL auf dem Client zu haben, möglicherweise unterstützt durch gespeicherte Prozeduren im Server. Sie können dann PostgreSQL so einrichten, dass es sich gegenüber dem authentifiziert, was Sie in Ihrem Netzwerk verwenden (KRB5, wenn AD, was ich empfehlen würde). Dies vereinfacht den Datenzugriff und ermöglicht es Ihnen, die Berechtigungen auf der Grundlage der Authentifizierung gegenüber der Datenbank zu steuern. Da Sie die Benutzer auf der Grundlage von AD authentifizieren können, können Sie die Berechtigungen entsprechend festlegen.

Eine wichtige Überlegung ist die Anzahl der Verbindungen. PostgreSQL hat einige Stellen, an denen jede aktuelle Verbindung geprüft und durchlaufen werden muss, und der Overhead für den Verbindungsaufbau und -abbau kann in einigen Fällen erheblich sein. Eine wichtige Entscheidung wird daher das Pooling von Verbindungen sein. Ob Sie das Connection Pooling zur Leistungssteigerung einsetzen, hängt davon ab, was Sie tun, aber ich habe Fälle gesehen, in denen PostgreSQL 600 Verbindungen ohne ernsthafte Probleme verarbeitet hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X