OOP: Weiß die Dose in welcher Schublade sie liegt???

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich hab gerade mal ein grundsätzliche Frage... Bisher hab ich Klassen nie so richtig als Objekte angesehen, die Daten/Dinge repesäntieren. Deswegen weiß ich nicht so genau wo welches Attribut/Methode hingehört.

Mal ein Beispiel:

Ich hab folgende Hirachie:
  • 1. Ebene: Schreibtische
    • 2. Ebene: Schubladen
      • 3. Ebene: Dosen
Also ich hab drei Klassen für die drei Objekte. Die Daten sollen in eine DB geschrieben werden. Die Verknüpfung erfolgt über die IDs.
Ich würde sagen der Klassische Fall.

Wo Kommen die Attribute parent_id hin und wo die Methoden save_to_db() ???

Ich wollte das so machen, das jede Klasse (Schreibtisch, Schublade, Dose) die Methode save_to_db() bekommt.

Nun gibt es mehrere Möglichkeiten:

1. Ich rufe Schreibtisch.save_to_db() auf. Der Schreibtisch wird in die DB eingetragen und bekommt eine ID, die ich der nächsten Methode mitgebe, also: Schublade.save_to_db(ID). Die Schublade speichert sich dann in die DB und vermerkt die parent_id... usw...

2. Jedes Objekt hat das Attribut parent_id welches bei der Instanzierung mitgegeben wird. Bei dem Aufruf der save_to_db()-Methode braucht man die IDs also nicht übergeben...

3. Nicht die Dose hat eine Methode save_to_db(), sondern die Schublade speichert die Dose in die DB. Von daher muß die Dose garnicht wissen in welcher Schublade sie liegt...

Welche Variante ist die "Beste" ???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Ich würde mir hierzu zwei Fragen stellen:

1. Muss die Dose das überhaupt wissen?
2. Kann die Dose nicht einfach die Schublade fragen, welche sie ist?

HTH
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

N317V hat geschrieben:2. Kann die Dose nicht einfach die Schublade fragen, welche sie ist?
Das wäre auch eine Möglichkeit. Aber dann müste ich die Schublade der Dose übergeben... Also im Grunde übergebe ich dann Schublade.self an dose.__init__() die es dann als self.parent "speichert"???

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Ich würde den Schreibtisch alle Schubladen speichern lassen. Danach ruft er für jede Schublade die save_to_db() Methode auf. Diese speichert dann alle Dosen und ruft für jede Dose die save_to_db() auf. Etc. pp.
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

... und der Schreibtisch hat ein Inhaltsverzeichnis aller Schubladen und jede Schublade ein Inhaltsverzeichnis aller Dosen.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

N317V hat geschrieben:... und der Schreibtisch hat ein Inhaltsverzeichnis aller Schubladen
Äh, nein. Wozu sollte er? Es reicht doch, wenn er eine Liste aller seiner Schubladen hat.
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

@Joghurt: Das meinte ich.

Im Prinzip kommt es jedoch auf die konkreten Anforderungen an. Unter Umständen kann es auch viel sinnvoller sein, wenn tatsächlich die Dose weiß in welcher Schublade in welchem Schreibtisch sie sich befindet. Die Dose also eine Art "Bewusstsein" ihrer Umgebung hat. Sowas wird aber leicht unsauber, weil man in der Regel diese Information doppelt vorhalten muss, sonst weiß zwar die Dose wo sie ist, aber die Schublade kann nichts über ihren Inhalt sagen.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Ihr macht euch die bewertung imo zu einfach.

Rein objektorientiert, wüsste der schreibtisch seine schubladen, die schubladen ihren inhalt.

ABER: Wenn wahrscheinlich ist das du oft von Dose auf Schublade schliessen musst, ignoriere das und speichere es eben.

Denn es nützt dir alles nichts, wenn du um an die informationen zu gelangen über 10.000 elemente iterieren musst (LANGSAM!).

An manchen stellen musst du eben die regeln etwas anders auslegen, oder das gesamtkonzept ändern um zu schnellen code zu gelangen.

(Und nein, die finale entscheidung kann dir keiner abnehmen.)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Also 10.000 Elemente hab ich sicher nicht ;)

In Wirklichkeit geht es mit um PyLucid's module admin:
https://opensvn.csie.org/traccgi/PyLuci ... e_admin.py

Da hab ich folgendes:
  • Modul/Plugin
    • Methode
      • interne Seite
Ich weiß nicht, aber z.Z. sind das vielleicht so 50 Elemente... Also nicht wirklich viel ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten