Hallo,
ich hab im Moment ein Problem die Objektorientierung mit einem effizienten Datenzugriff zu verbinden.
Mir ist schon klar das OO zwangsläufig langsamer ist als prozeduale Programmierung, aber ich würde den Geschwindigkeitsnachteil gerne so gering wie möglich halten.
Von der reinen OO-Logik gesehen habe ich jetzt beispielsweise ein Objekt Feld, welches ein Feld auf meiner Karte repräsentiert. Innerhalb des Objektes habe ich Methoden, die die einzelnen Attribute des Feldes befühlen. Dabei ist ein Datenbankzugriff notwendig.
Habe ich jetzt einen Ausschnitt aus meiner Karte, werden dort beispielsweise 25 Felder angezeigt. 25 Datenbankzugriffe sind nicht denkbar.
Wie löse ich das Problem am effizientesten?
Mein Ansatz ist im Moment eine Redundanz zu schaffen. Zum einen habe ich das Objekt Feld, welches sich über Methoden die kompletten eigenen Daten aus der Datenbank beschaffen kann.
Zum anderen bietet das Objekt auch Methoden an, um alle Attribute manuell zusetzen. Eine Feld-Factory kann Daten mehrerer Felder aus der Felddatenbank holen und die entsprechenden Feld-Objekte erstellen und befüllen.
Gibt es hierfür vielleicht einen eleganteren Ansatz?
Zum Zweiten ist es bei meinem Spieler-Objekt aufgrund der Vererbungshierarchie so, dass um alle Daten zu füllen mehrere Datenbankzugriffe nötig sind. Rein logisch gesehen ist ein Spieler in meinem Fall eine Spezialisierung eines Teilnehmers. Der Spieler stellt die gerade eingeloggte Person dar, während Teilnehmer zum Beispiel die Gegner sind.
Viele Teilnehmer-Eigenschaften (Liste mit Standorten, allgemeine Daten etc.) gelten auch für den Spieler, werden hier noch ergänzt.
Sollte ich hier der Performance zu liebe darauf verzichten die geerbten Methoden zu nutzen und alles in einem Datenbankzugriff realisieren? Also Performance oder Wartbarkeit?
Ich versuche die Datenbankzugriffe zu minimieren, allerdings stehe ich oft vor dem Problem, dass ich vieles dann mehrfach implementieren muss, da ich auch nicht immer alle Daten brauche und dann ist ein Join über mehrere Tabellen doch ineffizient. Es endet mit Redundanzen im Code. Natürlich lässt sich das nicht vermeiden, aber vielleicht kennt ihr ja bessere Wege.
Über Vorschläge und Diskussionen würde ich mich freuen :)