Einzelnen Beitrag anzeigen

Morphie

Registriert seit: 27. Apr 2008
Ort: Rahden
630 Beiträge
 
#1

Best practice: Benutzerverwaltung mit Datenbankanbindung

  Alt 30. Apr 2013, 10:23
Moin liebe DPler!

Vorweg solltet ihr folgendes wissen:
Ich arbeite in letzter Zeit viel mit C#, WPF und dem Entity Framework. Da läuft es ja so, dass man Datenobjekte direkt an Listen-Controls binden und über Templates die Datenobjektproperties an die Oberfläche durchreichen kann.
Es gibt also keine eigenen "ListItems" mehr, sondern jedes Item ist ein eigenes Objekt meiner Datenklasse (z.B. "Benutzer", "Gruppe" usw.)
Ändere ich in einem anderen Fenster den Namen des Objektes, wird dieser auch sofort in meinem List-Control geändert und dargestellt. Das ist also richtiges Binding, so wie es Embarcadero wohl mit den LiveBindings versuchen wollte...

Allerdings gibt es so einige Sachen, die mir an WPF nicht so gefallen. Der größte Kritikpunkt ist für mich die Performance, die bei großen Fenstern mit vielen Controls auf schwachen Rechnern schnell mal in die Knie geht.
Das ist in der VCL (Delphi), Thunderforms (VB6), MFC (C++), WinForms (.NET),... wesentlich performanter.
Und in unserer Anwendung wird es viele solcher "Controlling-Fenster" geben.

Jetzt zum eigentlichen Thema:
Ich möchte meine Delphi-Kenntnisse mal auf den aktuellen Stand bringen.
Erst mal möchte ich eine Benutzer / Gruppen / Mandantenverwaltung nach dem aktuellen Stand der Technik programmieren.

Als Vorbild sehe ich die Computerverwaltung von Windows, bei der man die Benutzer und Gruppen in einer Art ListView sieht. Jeder Benutzer kann mehreren Gruppen zugeordnet sein, jede Gruppe kann beliebig viele Benutzer aufnehmen...

Wie würden die Profis hier sowas umsetzen?

1) Klassen für Benutzer, Gruppen, Mandanten, Rechte usw. entwerfen
Daten von der Datenbank abfragen und die Objekte daraus generieren lassen (Select-Statement)
Items für das ListView-Control anlegen und im Data-Property einen Zeiger auf die Objekte legen
Beim Bearbeiten eines Benutzers z.B. ein neues Fenster öffnen und dem das Benutzerobjekt übergeben
Beim Speichern / Anlegen die Daten aus dem Objekt in die Datenbank schreiben (Update-Statement / Insert-Statement)
Beim Speichern den Benutzernamen usw. im ListView aktualisieren
Keine Datensenstiven Controls verwenden, sondern die entsprechenden Controls per Code füllen / lesen

2) So ähnlich wie 1 nur mit LiveBindings für die Präsentation der Daten (kommt dem Prinzip von WPF wohl am nähesten)

3) klassische Programmierung mit Recordsets und Datensensitiven Controls

4) ganz anders?


Erst mal geht es mir nur um direkte Kommunikation zwischen Windows-Programm und Datenbank. Eine Multi-Tier-Anwendung ist bei uns wohl nicht unbedingt notwendig. (zumindest hat in den letzten 20 Jahren kaum jemand danach gefragt)

Wenn man also so wie in Beispiel 1 vorgeht, wie werden dann die Objekte befüllt? Benutzt man hier besser ein ORM oder macht alles per Hand?
Welches ORM bietet sich dabei an?
So wie ich es verstanden habe, zieht man bei mORMot ja wieder eine Zwischenschicht in die Anwendung. Vom EntityFramework (Database First) kenne ich es so, dass ich mir die Datenbank designe und anschließend mit dem EntityFramework-Assistenten meine Klassen automatisch erzeuge. Über LINQ z.B. kann ich die Daten dann direkt von der Datenbank über die ADO.NET-Provider abfragen.
Gibt es solche ORMs in Delphi auch?
Oder anders gefragt: Hat diese Zwischenschicht in mORMot irgendwelche Nachteile? Ich würde dabei jetzt mit Performanceverlust rechnen, wenn man viele Daten schnell abfragen muss.

Ich denke das sind Grundlagen, die ich in Delphi noch nicht ganz verstanden habe, bzw. früher immer anders gemacht habe (Datensenstive Controls), bitte seid also gnädig mit mir
  Mit Zitat antworten Zitat