PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Programmiergrundlagen


Hucke
2005-08-01, 11:15:14
Ich hätt da mal ne generelle Frage zu geschickter Programmierung. Ich selber arbeite seit fast 5 Jahren als Java Entwickler. Allerdings programmiere ich meist irgendwelche Datenbankanwendungen. Von daher hab ich ziemlich wenig mit geschicktem Objekt Management zu tun (Datenbanken stehen auf prozedurale Arbeit), würd mich aber gern mal in diesem Bereich weiterbilden.

Nehmen wir mal als Beispiel ein Kassenprogramm. Hier werden einzelne Buchungen als Objekte abgelegt (in den Buchungen gibts dann noch Verweise auf andere Objekte), der ganze Krempel wird dann in eine Datei geschrieben. Nehmen wir aber mal als Beispiel, daß ich jetzt 500000 Datensätze habe (worüber meine Datenbanken müde lächeln), dann geht meine Anwendung schon übelst in die Knie. Das geht mit Sicherheit auch geschickter.

Vielleicht kennt ihr ja Bücher oder Tutorials die sich mit diesem Thema befassen. Also her mit Tips und Tricks und Links. :D

Demirug
2005-08-01, 11:20:28
Warum nimmst du dann keine Datenbank für dein Kassensystem?

Die Beschreibung der Aufgabenstellung ist etwas ungenau. Mir scheint es jedoch das es hier erstmal weniger um das Programmieren sondern um Fragen des Designs geht.

Neomi
2005-08-01, 11:31:54
Um das Problem einzugrenzen...

Bei was für Aktionen wird es denn träge? Was für Arbeit steht an und wie wird sie aktuell erledigt? Welche Ansätze nun geschickt sind und welche nicht, hängt vom jeweiligen Problem ab.

Hucke
2005-08-01, 12:17:55
Hey, das ist nur ein Beispiel. Ich wollte eigentlich meine Grundlagenkenntnisse auffrischen. Wie Demirug schon schrieb, vermutlich eine Designfrage.

Und genau aus diesem Grund nehm ich keine Datenbank. Ich wollt halt mal was anderes machen. Wenn man immer nur das gleiche Programmiert, dann wirds irgendwann langweilig und man verliert einfach die Sicht für andere Dinge.

Aber um das ganze mal genauer zu formulieren:
Wir haben ein Hauptobjekt, das sich Buchung nennt. Da sind die Sachen wie Einnahmen, Ausgaben, Datum der Buchung, Buchungstext, Buchender Mitarbeiteer und so drin. Teilweise Objekte, teilweise einfach nur Variablen.
Jetzt hab ich natürlich in meiner Hauptanwendung ein Array von diesen Objekten. Um allerdings Summen zu bilden (Kassenbestand, Summe Einnahmen, Summe Ausgaben, usw) muß ich immer durch all die Objekte durchackern. Was natürlich bei 500000 Objekten etwas lahm wird. Das Problem hab ich mit ner Datenbank nicht. Die lacht drüber und gibt mir alles was ich möchte (korrektes SQL vorausgesetzt). Mir fehlt einfach die Grundlage in sinnvoller Datenhaltung.
Vermutlich wär ne Hashtable mit den Objektreferenzen und nem Vergleichswert fürs Datum schonmal ne Hilfe.

Aber wie gesagt, ich hätt dazu gern noch ein paar Grundlagen erlernt.

HellHorse
2005-08-01, 13:24:52
Oj, Persistenz ;(

Du hast mehr oder weniger zwei Optionen:
O/R Mapping: Objekte werden auf Tupel abgebildet und in einer relationen Datenbank gespeichert
Objektdatenbanken: Objekte werden `direkt' in einer Datenbank gespeichert

Normalerweise wird in Java ersters gemacht. Da gibt's mehr Technologien und Produkte dafür, als ich Finger habe. Die haben alle Unterschiedliche Vor- und Nachteile, und weil es keine `beste' Lösung gibt, gibt es so viele. Entsprechend schwierig ist ein Überblick. Zudem ist die Auswahl der Persistenz meist `Chefsache' und es spielt recht viel Politik rein. Will heissen normalerweise hast du als Programmierer nichts dazu zu sagen (ausser fluchen).

Senior Sanchez
2005-08-01, 13:51:28
Es gab doch mal nen Java Projekt (mir fällt jetzt die Abkürzung net mehr ein), dass doch sämtliche Persistenzvarianten unter einen Hut bringen wollte.
Ne Art generische Schnittstelle wo am Ende nur noch das Speicherverfahren entsprechend gewechselt werden musste und nichts am Code verändert werden brauchte.

EDIT: JDO isses *g*
EDIT2: Ne Variante wäre eventuell Hibernate (http://www.hibernate.org).

Aber Hucke, das grundlegende Design ist ansich richtig, sprich die Aufteilung in diese Klassen die de da hast, nur das ist leider nicht immer alles. Was ich mir noch denken könnte, um zumindest multiple Berechnungen vereinfachen zu können wäre ne Art Cache, aber obs das wahre ist?

icemanemp
2005-08-01, 16:36:01
Du programmierst Java seit 5 Jahren. Java ist die OO-Sprache schlechthin. Wie kann man dann bitte java "vergewaltigen" um damit prozedural zu programmieren! Dann könnte man auch eine andere Sprache nehmen.
Selbst DB-Anwendung mit Java sollten von vornerein mittels OOA von Grund auf OO programmiert werden. Lediglich die DB ist dann nicht OO, aber dafür gibt es ja wie schon oben beschrieben Lösungen... würde mal grundlegend was in der Firma ändern.

Warum verwaltest du die Datensätze in einem Array? Wenn du eine Objectliste hättest (kenn jetzt nur die Delphi-Implementierung), dann könntest du deine eigene Klasse davon ableiten und jedes Mal, wenn ein BuchungsObjekt hinzugefügt wird bzw. eine Summe erhält oder sonst was, dann wird in der Klasse, die von der Objectliste abgeleitet wurde, die Summe um den Betrag, der Buchung erhöht, damit musst du nicht immer durch alle Objekte laufen und Dinge zusammen zählen.
Natürlich wird beim Löschen von Buchnungen auch die Summe verringert. Ist doch nicht so schwer oder gibt es so was in Java net (was ich mir nicht vorstellen kann, ne Objectliste ist in Delphi auch nur ne erweiterte Liste von Pointern) Dürfte nicht nur performancemässig besser sein, sondern auch technisch besserer realisiert, da du noch mehr Sachen beim hinzufügen oder Löschen von Objekten aus der Liste machen kannst.