Klassendesign

recoon-a

Grünschnabel
Hallo!
Nach dem lesen einiger Lektüren zum Thema OOP in php, hab ich doch noch paar Unklarheiten...

Auf einer von mir erstellten Seite habe ich z.B. eine Gallerie. Diese möchte ich jetzt objektorientiert umschreiben. Wie setze ich das jetzt um? Ich habe angefangen mir eine Klasse "Gallery" zu erstellen, diese hat jetzt eine Methode welcher eine $_GET['aktuelleSeite'] übergeben wird und die dann die entsprechenden Einträge als Mysql Ressource zurückgibt.
Schön und gut soweit. Jetzt frage ich mich allerdings wie ich z.B. die Blätterfunktion implementiere. Schreibe ich jetzt eine Methode "pagination" oder wie? Steht in dieser dann sowas wie:
PHP:
public function pagination($class) {
  [...]
  echo "<span class=\"$class\"><a href=\"$ersteSeite\">erste Seite</a></span>";
  [...]
}

Hoffe ihr versteht mein Verständnisproblem und könnt mir weiterhelfen.

Danke!
Recoon
 
Das ist im Prinzip dir überlassen. Ich weiss, diese Antwort wolltest du nicht hören. ;)

Aber es gibt imho 3 Wege, wie du es machen kannst.

1.
Du erstellst innerhalb der Klasse Gallery die Methode pagination, welche genau auf die Gallery abgestimmt ist.

2.
Du erstellst eine weitere Klasse mit der o. g. Methode, welche von allen anderen Klassen genutzt werden kann. Dieser ist dann egal ob sie von der Gallery aufgerufen oder ob sie von einem Blog aufgerufen wird. Sie bekommt immer die selben Werte übergeben, führt immer das selbe aus und gibt immer das selbe zurück, pasta.
Vorteil daran: Du hast eine einzige Stelle zum bearbeiten und nicht 10 verschiedene Paginas von 10 verschiedene Klassen.

3.
Du lagerst das in die Templates aus. Aber wie ich das so sehe nutzt du kein Templatesystem, oder?

[ot]
Argh, mein 404er Beitrag. Das kann ja nicht gut gehen, wenn ich auch noch das Gefühl habe die Frage nicht wirklich verstanden zu haben. :)
[/ot
 
Zuletzt bearbeitet:
Das ist im Prinzip dir überlassen. Ich weiss, diese Antwort wolltest du nicht hören. ;)
Richtig, dennoch habe ich sie erwartet ;-]

1.
Du erstellst innerhalb der Klasse Gallery die Methode pagination, welche genau auf die Gallery abgestimmt ist.

Hmm das wäre dann ja wohl meine erste angehensweise... Gefällt mir aber nicht so ganz :-)

2.
Du erstellst eine weitere Klasse mit der o. g. Methode, welche von allen anderen Klassen genutzt werden kann. Dieser ist dann egal ob sie von der Gallery aufgerufen oder ob sie von einem Blog aufgerufen wird. Sie bekommt immer die selben Werte übergeben, führt immer das selbe aus und gibt immer das selbe zurück, pasta.
Vorteil daran: Du hast eine einzige Stelle zum bearbeiten und nicht 10 verschiedene Paginas von 10 verschiedene Klassen.
Ich glaub du hast den Nagel auf den Kopf getroffen, vorallem weil ich die Blätterfunktion nachher auch bei den News einbauen muss! Also schreibe ich eine Klasse Pagination und übergebe ihr dann die Argumente aus der Gallery Klasse. Diese hat dann auch eine "output" Methode welche dann den ganzen Schmarn ausgibt. Richtig so?

3.
Du lagerst das in die Templates aus. Aber wie ich das so sehe nutzt du kein Templatesystem, oder?
Richtig :rolleyes:

[ot]
Argh, mein 404er Beitrag. Das kann ja nicht gut gehen, wenn ich auch noch das Gefühl habe die Frage nicht wirklich verstanden zu haben. :)
[/ot

Ach war doch ganz gut ;-)
 
Na das ist ja wirklich besser gelaufen, als ich dachte. :)

Also schreibe ich eine Klasse Pagination und übergebe ihr dann die Argumente aus der Gallery Klasse.
Direkt eine Klasse namens "Pagniation" würde ich nicht erstellen.
Mehr Sinn würde eine umfangreichere "Template"-Klasse machen.
Sprich du erstellst eine Klasse namens (z. B.) "Output" oder wie auch immer sie heißen mag. In diese packst du die Methode für die Pagina, aber auch alle anderen die irgendeinen Output generieren.
Somit hast du wiederum nur eine Klasse für den ganzen Käse und nicht 10 verschiedene mit irgendwelchen HTML-gewurste. :)

Diese hat dann auch eine "output" Methode welche dann den ganzen Schmarn ausgibt. Richtig so?
Das kannst du ruhig wieder in der Methode der Gallery machen.
Da würde dann eben "echo $this->output->pagination( $foo, $bar );" stehen.

Wobei das direkt Ausgeben früher oder später Problem nach sich ziehen kann/wird.
Spätestens dann, wenn du Daten übergibst, diese jedoch erst von Klasse X verarbeitet werden, wenn Klass Y schon lange fertig ist.
Somit hast du 2 verschiedene Datensätze für ein und den selben Seitenaufbau.
Mal ganz grob angerissen.. :)
 
Zurück