AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Datenbankanwendung und Klassen - sinnvoll?
Thema durchsuchen
Ansicht
Themen-Optionen

Datenbankanwendung und Klassen - sinnvoll?

Ein Thema von süden · begonnen am 9. Jan 2014 · letzter Beitrag vom 13. Jan 2014
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#11

AW: Datenbankanwendung und Klassen - sinnvoll?

  Alt 10. Jan 2014, 08:37
Könnten wir uns nicht einfach darauf einigen, dass OOP-Kenntnisse für ein ORM elementar sind?
Ich glaube schon.

Ich habe mein Studium 1988 abgeschlossen. Da war das funktionale Zerlegen eines Problemfeldes angesagt. Meine Diplomarbeit ist ein umfangreiches Programm gewesen, in dem ich die Funktionale Zerlegung sehr gut umgesetzt habe. Aber schon damals hat mich gestört, dass Daten nicht so "sauber" behandelt wurde. Als dann OOP aufkam und ich auch viel darüber gelesen hatte, hat es dennoch fast 2 Jahre gebraucht, bis ich den Paradigmenwechsel auch wirklich vollzogen habe. Ich habe einfach bei Problemlösungen nicht in Objekten, ihren Eigenschaften und Methoden gedacht, sondern anfangs nur in Funktionen. Man muss nämlich bereits ganz früh im Design in Objekten denken.

Aber auch ein anderer Aspekt hat mich damals wie hier in der Fragestellung beschäftigt: Wenn ich eine relationale Datenbank habe, in meinem Programm aber mit Objekten arbeiten will, muss ich dann tatsächlich ein Objekt definieren und beim Einlesen der Daten, diese in ein Objekt kopieren? Soll man also Klassen für Datensätze definieren? Wenn die Fragestellung hier so gemeint ist, ist sie sicherlich interessant.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
fkf

Registriert seit: 23. Jan 2008
Ort: Dietmannsried
14 Beiträge
 
Turbo Delphi für Win32
 
#12

AW: Datenbankanwendung und Klassen - sinnvoll?

  Alt 10. Jan 2014, 08:47
Zitat:
Aber auch ein anderer Aspekt hat mich damals wie hier in der Fragestellung beschäftigt: Wenn ich eine relationale Datenbank habe, in meinem Programm aber mit Objekten arbeiten will, muss ich dann tatsächlich ein Objekt definieren und beim Einlesen der Daten, diese in ein Objekt kopieren? Soll man also Klassen für Datensätze definieren? Wenn die Fragestellung hier so gemeint ist, ist sie sicherlich interessant.
Genau das ist meine (ungelöste) Frage, die ich bisher (aus Bequemlichkeit/Unkenntnis) immer mit "Nein" beantwortet habe.
Eine vertiefende Diskussion (inkl. prakt. Vorgehensweise/Beispielen) wäre super.

F.F.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.380 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Datenbankanwendung und Klassen - sinnvoll?

  Alt 10. Jan 2014, 09:06
Zitat:
Aber auch ein anderer Aspekt hat mich damals wie hier in der Fragestellung beschäftigt: Wenn ich eine relationale Datenbank habe, in meinem Programm aber mit Objekten arbeiten will, muss ich dann tatsächlich ein Objekt definieren und beim Einlesen der Daten, diese in ein Objekt kopieren? Soll man also Klassen für Datensätze definieren? Wenn die Fragestellung hier so gemeint ist, ist sie sicherlich interessant.
Genau das ist meine (ungelöste) Frage, die ich bisher (aus Bequemlichkeit/Unkenntnis) immer mit "Nein" beantwortet habe.
Eine vertiefende Diskussion (inkl. prakt. Vorgehensweise/Beispielen) wäre super.

F.F.
ganz einfache Antwort: Ja - Das hört sich zwar anfänglich recht komplex an (ist es auch) aber der Sinn eines ORM bzw. OPF liegt genau darin dieses Mapping Klasse - Datensatz zu vereinfachen (ganz einfach gesprochen). Wenn das System wirklich gut ist, definierst Du nur eine KLasse, sagst ggf. in welcher Tabelle(n) der Inhalt gespeichert werden soll und der Rest (incl. Anpassung der Datenbank beim Kunden) macht das darunterliegende System. Um einen Datensatz zu laden reicht dann z.B. ein

Delphi-Quellcode:
 var Kunde: TKunde;
begin
  Kunde := TKunde.create(1);
...
end;
wobei 1 die ID des Datensatzes ist. Die Abfrage der Daten in der Datenbank und die Zuordnung zur Klasse geschieht dann in 2-3 Methoden die für alle Klassen funktionieren - die müssen also nicht immer für jede neue Klasse individuell geschrieben werden.


Grüße
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#14

AW: Datenbankanwendung und Klassen - sinnvoll?

  Alt 10. Jan 2014, 09:07
Vielleicht nur zuviel reininterpretiert, aber imho geht die ursprüngliche Frage aber auch noch weiter.

Zitat:
Bisher habe ich: Komponenten drauf, paar Zeilen Code - fertig. Nix Klassen usw.
Da geht's find ich nicht nur um OOP vs. Prozedurale Progrmmierung, sondern auch um Trennung der Anwendungslogik von der Darstellung usw. bis in Richtung der ganzen Pattern-Geschichten.

Und vielleicht auch RAD vs. "vernünftiger Struktur"?

Mich interessiert dieser Gedanke nämlich auch, da ich mitlerweile auch versuche Logik und GUI zu trennen, ich aber oft auch nur so kleine Mini-Programme auf die schnelle machen muss, wo irgendwer sich ein paar Daten aus der DB mit anzeigen lassen muss um dann ggf. diese zu Filtern und als CSV zu exportieren und das war's dann schon.
Und da mach ich's dann auch wie der TE. Paar VCL-Komponenten drauf und fertige VCL-Objecte wie TStringlist verwendet und fertig, da der Mehraufwand mit Pattern usw. sich da kaum lohnt.

Sprich irgendwo gibt es wahrscheinlich eine Grenze ab wann es sinnvoll wird "vernünftig" zu arbeiten.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: Datenbankanwendung und Klassen - sinnvoll?

  Alt 10. Jan 2014, 09:11
Zitat:
Aber auch ein anderer Aspekt hat mich damals wie hier in der Fragestellung beschäftigt: Wenn ich eine relationale Datenbank habe, in meinem Programm aber mit Objekten arbeiten will, muss ich dann tatsächlich ein Objekt definieren und beim Einlesen der Daten, diese in ein Objekt kopieren? Soll man also Klassen für Datensätze definieren? Wenn die Fragestellung hier so gemeint ist, ist sie sicherlich interessant.
Genau das ist meine (ungelöste) Frage, die ich bisher (aus Bequemlichkeit/Unkenntnis) immer mit "Nein" beantwortet habe.
Eine vertiefende Diskussion (inkl. prakt. Vorgehensweise/Beispielen) wäre super.

F.F.
Weil man dabei anders denken muss

Erst erstellt man die benötigten Objekte, die für die Problemlösung gebraucht werden
Dann die notwendigen Methoden (Suchen, Laden, etc.)

Dann schafft man sich die Speicherstruktur (z.B. eine Datenbank) die alle diese Anforderungen erfüllen kann

Diese Speicherstruktur kann dann auch nach Belieben geändert werden (Datenbanksystem X, Dateibasiert, Webservice, etc.) solange diese alle Anforderungen erfüllt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
süden

Registriert seit: 20. Feb 2009
Ort: Lindau (Bodensee)
75 Beiträge
 
Delphi 2007 Professional
 
#16

AW: Datenbankanwendung und Klassen - sinnvoll?

  Alt 10. Jan 2014, 09:42
Na, da habe ich ja was angestoßen ....

... ich schließe mich meinen Vorrednern an, Ihr habt's alle getroffen, was ich meine.

ORM bzw. OPF ??? Das Rad neu erfinden? Gibts doch schon, welche sind gut?

Ich habe mich schon damit beschäftigt.
In der Fachliteratur wird das alles schön strukturiert und logisch dargestellt.

Aber in Bezug auf Datenbankanwendungen UND Praxis (wenns kein Hobby ist) habe ich nicht viel gefunden.
Datenbank = schon Klassen usw.

Es geht mir darum, es besser und auf Dauer einfacher und sicherer zu machen.
Dabei möchte ich nicht "mit Kanonen auf Spatzen schießen" nur weil es so schön ist, etwas zu können.

Erstmal vielen Dank für das Interesse und die Antworten.
Ich habe erfahren, ICH BIN NICHT ALLEIN, schon mal ein gutes Gefühl.
Gruß süden

[Delphi 2007 Pro, WIN 7 Pro, DevEx, Fastreport, TMS]
  Mit Zitat antworten Zitat
Benutzerbild von MrSpock
MrSpock
(Co-Admin)

Registriert seit: 7. Jun 2002
Ort: Owingen
5.865 Beiträge
 
Delphi 2010 Professional
 
#17

AW: Datenbankanwendung und Klassen - sinnvoll?

  Alt 10. Jan 2014, 09:57
Dann will ich mich auch mal outen, ist ja gerade wieder aktuell

Ich nutze für das Einlesen von Daten aus Datenbanken für die einzelnen daten nicht selbst erzeugte Klassen. Ich nutze FibPlus als Komponenten und lesen dann Daten ein, die in DBGrids oder anders dargestellt werden. Das modifizieren von Daten geht dann ggf. über diese Komponenten oder auch mal über Methoden, die aber dann nicht dem Datenobjekt zugeordnet sind. Was ich damit meine will ich an einem kleinen Beispiel erklären. Angenimmen ich habe ien Bestellung mit Positionen. Dann habe ich all diese Daten in einer Datenbank. Es gibt aber in meinem Programm kein Objekt AktuelleBestellung, die die Daten enthält. Ich erzeuge dann eine Rechnung, auch dazu gibt es keine Methode in der Form AktuelleBestellung.ErzeugeRechnung, weil es ja das Objekt nicht gibt. In diesem Sinne landen die Daten also in der Regel in meinen Programmen nicht in "zugehörigen" Objekten.
Albert
Live long and prosper


MrSpock
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Datenbankanwendung und Klassen - sinnvoll?

  Alt 10. Jan 2014, 10:25
Zitat:
ORM bzw. OPF ??? Das Rad neu erfinden? Gibts doch schon, welche sind gut?
(Reihenfolge ohne Wertung)
hcOPF
dORM
mORMot
tiOPF
TMS Aurelius
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Datenbankanwendung und Klassen - sinnvoll?

  Alt 10. Jan 2014, 14:23
ich liebäugel schon lange mit Klassen (nicht lachen bitte), und habe ein schlechtes Gewissen, weil ich noch keine selbst gebaut habe.
Du musst Dich nicht schämen, das ist nix schlimmes, aber Du solltest daran arbeiten...

Das Thema interessiert mich auch sehr. Im Grunde geht es um einen Themankomplex:

- Trennung Daten+Geschäftslogik von der GUI
- lose und einfache Verbindung der beiden Schichten
- effektive und einfache Definition der Klassen
- effektive und einfache Einbindung von Datenbanken (ORM)

Ich finde es schade, dass das Thema bisher so vernachlässigt wird.
Es gibt zwar verschiedene Lösungen für einzelne Teilaspekte aber m.E. nichts was alles abdeckt.

Im Grunde geht es daraum:
- Ich will sehr einfach Klassen definieren. Bestenfalls über Metadaten (also Auflistung der gewünschten Probpertys) oder sogar grafisch. Die grundlegenden Eigenschaften und Fähigkeiten sollen automatisch vorhanden sein.
- Ich will den Klassen die Geschäftslogik (Methoden) hinzufügen können.
- Ein Framework soll sich darum kümmern, die Objekte zu erzeugen, zu verwalten und auf Anfrage bereit zu stellen (Kunde(12345)).
- Die Datenspeicherung soll ebenfalls automatisch und möglichst flexibel erfolgen.
- Die GUI soll keinerlei Kenntnis der Daten und Geschäftslogik haben. Sie soll lediglich wissen, welche Daten sie darstellen soll (Namen eines Kunden oder Kennzeichen eines KFZ) und wo sie diese abrufen kann. Die GUI sollte also weitgehend ohne Quelltext auskommen. Wenn ein KFZ-Objekt in seiner Eigenschaft HatTÜV false liefert könnte ein OK-Schalter deaktiviert werden, ohne dass die GUI selbst weiß warum.
Dafür muss die Datenschicht natürlich Schnittstellen bereit stellen, an die die GUI gebunden werden kann.


Grundsätzlich würde ich komßplexere Projekte eher mit Klassen aufbauen, da die Projekte dann aus meiner Sicht flexibler zu warten und besser zu verstehen sind.
Andererseits ist es natürlich auch möglich, die gesamte Funktionalität in Datenbanken zu packen und dann in der GUI nur noch dumme DB-Controls zu verbauen.
Letztlich ist das Geschmacksache und von den eigenen Fähigkeiten abhängig (bzw. davon was man als Entwickler besser kann).

Wichtig ist auf jeden Fall, die Geschäftslogik nicht in der GUI umzusetzen und beides miteinander zu vermischen. Dann hat man schon mal die besten Voraussetzungen für eine vernünftige Projektstruktur.

Ich würde mir wünschen, dass Delphi diesbezüglich besser unterstützen würde.



Hier mal einige Links, die in diese Bereiche gehen:
http://www.delphipraxis.net/164573-d...nd-hoeher.html
http://www.delphipraxis.net/161102-k...onisieren.html
http://www.delphipraxis.net/172249-d...iskussion.html
http://www.delphipraxis.net/165090-g...nkprojekt.html
http://www.delphipraxis.net/164270-k...zu-mormot.html
http://www.delphipraxis.net/176478-m...realitaet.html

Und natürlich:
[Werbeblock]
http://www.delphipraxis.net/173360-s...framework.html
[/Werbeblock]
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#20

AW: Datenbankanwendung und Klassen - sinnvoll?

  Alt 10. Jan 2014, 14:54
Kann sein, daß ich Dich da falsch verstanden habe:
Zitat:
- Die GUI soll keinerlei Kenntnis der Daten und Geschäftslogik haben. Sie soll lediglich wissen, welche Daten sie darstellen soll (Namen eines Kunden oder Kennzeichen eines KFZ) und wo sie diese abrufen kann.
Wenn das (G)UI keine Ahnung von den Daten hat, dann übergibst Du kein KFZ-Kennzeichen, sondern einen 10(?)stelligen alphanumerischen Code.

Übrigens würde ich zumindestens die "Oberflächenlogik" als Teil des UI behandeln. Typische Schreibfehler erkennen, ist oft von der eingesetzten Tastatur(sprache) abhängig. Damit würde ich die "Geschäftslogik" nicht belasten.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz