2010-03-23 12 views
13

Ich möchte erfahrene Benutzer fragen, ob Sie datensensitive Steuerelemente zum Hinzufügen, Einfügen, Löschen und Bearbeiten von Daten in der Datenbank bevorzugen, oder Sie bevorzugen, dies manuell zu tun.Wie verwenden Sie Datensensitive Steuerelemente "richtig"?

Ich habe einige DB-Anwendungen entwickelt, in denen ich aus Gründen der "benutzerfreundlichen Richtlinie" auf komplizierte Tabellenereignisse stoße (afteredit, afteredit, aftered ... und beforeedit, beforeinsert, before ...). Danach war es eine ziemlich üble Arbeit, die Anwendung zu debuggen.

Bewusst von diesem Risiko (später von einer anderen Anwendung) Ich habe versucht, dieses Problem zu vermeiden, so habe ich erhöhte Aufmerksamkeit auf den Schreibcode gut, lesbar und umfassend. Es schien von Anfang an alles in Ordnung zu sein, aber da ich vor dem Senden und Laden von Daten usw. einige Vorverarbeitungen erledigen musste, stieß ich wieder auf die gleichen Probleme, "langsam und unvermeidlich". Irgendwann konnte ich sowieso keine Datawarekontrollen benutzen, und was am Anfang als "coole" Eigenschaft von DAControl erschien, verwandelte sich am Ende in ein Hindernis. Ich musste eine spezielle Routine für Nicht-Dataware-Steuerelemente schreiben, um sich als Dataware zu verhalten. Dann fragte ich mich, warum sollte ich Dataware-Steuerelemente verwenden? Ist es besser, eine Anwendungsarchitektur für Nicht-Dataware-Steuerelemente zu finden? Es benötigt natürlich mehr Zeit, um fehlerfreien Code zu schreiben, aber lohnt es sich? Ich weiß nicht ...

ich mich passierte mehrmals, wie verhext: Paradies am Anfang Hölle am Ende ...

Ich weiß es nicht, wenn ich falsch Methode DB-Programm schreiben , wenn es eine übliche Praxis gibt, wie man vorgeht. Oder wenn es allgemeines Problem für jeden ist?

Thanx für Ratschläge und Ihre Erfahrungen

Antwort

0

Das Geheimnis in DataSet Parameter Automatisierung sein sollte, können Sie ein Steuerelement erstellen, die Datensätze zusammen in Master-Slave-Weg klebt, nur durch Verbindungen zwischen ihnen zu definieren. Natürlich sollte eine solche Kontrolle mit Formparametern auf andere verallgemeinerte Art und Weise gefüttert werden. In diesem Fall rufen Sie das Formular mit der Entitätskennung auf, alle Datensätze werden in der richtigen Reihenfolge gefüllt und erlauben es, die Daten in der Datenbank automatisch vom Provider zu aktualisieren.

Im Allgemeinen ist es besser, DataSets eine genaue Darstellung von Tabellen mit optionalen berechneten Feldern zu haben (fkInternalCalc funktioniert manchmal besser, da es mit Zeilenänderung nicht Feldänderung aktualisiert) an datensensitive Steuerelemente gebunden. Datensensitive Steuerelemente sind der optimale Ansatz und weniger fehleranfällig. Wie in jedem Aspekt gibt es Ausnahmen.

Wenn Sie zu viele Leimfunktionen schreiben müssen, liegt das Problem wahrscheinlich nicht im Designmuster, sondern in der VCL.

4

Ich habe Anwendungen geschrieben, die datenbewusste Komponenten gegen TTable-basierte Komponenten und Anwendungen, die nicht datensensitive Komponenten verwendeten, verwendet haben.

Meine Präferenz in diesen Tagen ist die Verwendung von datensensitiven Komponenten, aber mit TClientDataSets anstelle von TTable Style-Komponenten.

Mit einem TClientDataSet muss ich meine Benutzeroberflächenstruktur nicht meine Datenbankstruktur nachahmen. Es ist flexibel genug, um es mit den Daten aus mehreren Tabellen zu füllen, und wenn Sie die Aktualisierungen wieder auf die Datenbank anwenden, können Sie Datensätze nach Belieben manuell hinzufügen/löschen/aktualisieren.

+0

Wayne Niddery hat darüber in seinem Artikel "Kann gutes objektorientiertes Design datensensitive Steuerelemente enthalten?" Sie finden es auf http://www.logicfundamentals.com im Bereich Artikel. – Erwin

0

Die meiste Zeit verwende ich datensensitive Steuerelemente, die mit einer In-Memory-Tabelle (kbmMemTable) verknüpft sind, die aus einer Abfrage gefüllt wird.

Die Vorteile ich sehe, sind:

  1. ich volle Kontrolle über alle Einsätze/Aktuelles/posts/Änderungen an der Datenbank haben.
  2. Sie müssen sich keine Sorgen machen, dass ein Benutzer einen Datensatz im Aktualisierungsmodus verlässt (andere Benutzer werden gesperrt)
  3. Habe ich die volle Kontrolle über alle Einfügungen/Aktualisierungen/Posts/Bearbeitungen erwähnt?

Mit dem In-Memory-Tabelle ist so einfach wie:

dataset.sql.add('select a.field,b.field from a,b'); 
dataset.open; 
inMemoryTable.loadfromdataset(dataset); 
inMemoryTable.checkpoint; 

Und dann in die Datenbank „Lösung“ zurück, die Sie gegeben Zugangs zu den ursprünglichen und neuen Daten für jedes Feld in jedem Datensatz (Ähnlich wie bei einem Trigger) - Sie können eine vollständige Bearbeitung in Millisekunden problemlos durchführen und auflösen - selbst wenn der Endbenutzer 30 Minuten brauchte, um die datensensitiven Steuerelemente auszufüllen.

0

Haben Sie eine O/R mapper für Delphi wie tiOPF oder hcOPF in Betracht gezogen?

Dadurch wird die Geschäftsdomänenlogik von der Datenbankschicht getrennt. Bei großen und älteren Systemen ist es sogar üblich, einen weiteren Layer hinzuzufügen, den 'Anti Corruption Layer', der das Modell vor Änderungen im Datenbankentwurf schützt.

Verwandte Themen