![]() |
|
|
Themen-Optionen |
|
|
Nach oben #1 |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
|
Basierend auf dem Tutorial [PHP] thumbnails erstellen - kleine Funktion habe ich angefangen eine kleine Klasse dafür zu schreiben.
Da ich noch nicht richtig fit in OOP bin gibt es sicherlich einige Punkte, die man verbessern kann und andere, die man verbessern muss! Mich interessiert daher eure Meinung dazu, wo die Fallstricke in der Klasse sind, was ist daran brauchbar, was nicht.... Genutzt wird das dann so: PHP-Code:
PHP-Code:
Geändert von Jann Hendrik (03.09.2007 um 12:23 Uhr). |
|
|
|
|
|
Nach oben #2 |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Einige Sachen, die nicht wirklich was mit der Klasse als Solches zu tun haben.
Wenn du eine Ganzzahl verwendest .. warum machst du sie dann explizit zu einem String? Ich finde, dass man immer mit dem Typ arbeiten sollte, den man auch erwartet. PHP-Code:
Was mich total stört ist der Aufruf: PHP-Code:
Man sollte versuchen Funktionalitäten so zu abstrahieren, dass man allein durch das Lesen des Aufrufs im Grunde versteht, was dort geschieht. Da ist das $sudoku meiner Ansicht nach total kontraproduktiv. Ansonsten ist da nichts Besonderes zu entdecken, was man beurteilen könnte. Eine Klasse allein hat ja nichts mit objektorientierte Programmierung zu tun. |
|
|
|
|
|
Nach oben #3 | |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
|
Nun, auf beide deine Punkte (thumbail und sudoku) kann ich nur antworten:
*mist* - klar, wird korrigiert! Zitat:
Das mag sein - aber eine Klasse allein kann schon schlimm genug werden, wenn sie unsauber ist. |
|
|
|
|
|
|
Nach oben #5 |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
|
Ich dachte mir, dass das sinnvoll ist um ein korrektes type-casting machen zu können.
Aufgegabelt habe ich das in der Klasse, die ich hier ([PHP] vCard PHP Parser) beschrieben habe. |
|
|
|
|
|
Nach oben #6 | |
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
|
Wie wäre es mit folgender API?
PHP-Code:
Zu deiner API stellt sich mir einfach die Frage, warum so viele Methodenaufrufe? Was willst du mit einer Konfigurierten "Thumbnail"-Klasse? Doch nur einmal Thumbnails in einem bestimmten Format erzeugen, ggf. auch ein zweites mal in einer anderen Größe, aber da wäre ja nur das Quell-Verzeichnis redundant. Ich bin kein Freund von langen Parameterlisten, aber du hast hier doch nur eine Funktion, die 4 Parameter benötigt. Das "Ausklammern" dieser 4 Parameter in eigene Methodenaufrufe macht doch nur Sinn, wenn die Klasse mehrmals mit den selben Parametern benutzt wird. Anders betrachtet: Du speicherst einen Status deines Objektes. Warum muss ein Thumbnail-Generator die beiden Verzeichnisse speichern? Warum das zuletzt benutzte Bildgrößen-Format? Das macht nur Sinn, wenn der Generator mehrfach mit den gleichen Werten aufgerufen werden soll, macht ihn aber schwerfälliger und seine Bedienung fehleranfälliger. Mit Ausklammern meine ich folgendes: PHP-Code:
Zitat:
assert() wäre ein Ansatz, Exceptions ein weiterer. Und, natürlich lässt sich sowas schön in abstrakten Basis-Klassen kapseln, nur dann eben besser nach dem Motto: "Setze, falls gültig, andernfalls schmeiße einen Fehler" anstatt "Setze, falls gültig, sonst nicht" oder "Machs irgendwie gültig und setze". Basti Geändert von Basti (03.09.2007 um 12:48 Uhr). |
|
|
|
|
|
|
Nach oben #7 | |||||
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
|
Zitat:
Ich dachte, dass es vorteilhaft sein könnte, wenn das ausgeklammert ist, kann das aber nicht begründen, das war mehr intuitiv... Zitat:
Gerade die Einschränkung auf bestimmte Bildtypen bzw. die Rekursion gefällt mir als Gedanke! Was die Datei-Umbenennung angeht - da weiß ich nicht so recht. Ich finde das durchaus praktisch, wenn die thumbnails genau heißen, wie die Originale. Was wäre hier sinnvoll zu beachten, wenn man abweichende Namen haben will? Vorstellen könnte ich mir die x-y-Dimensionen anzugeben, weil man dann theoretisch mehrere unterschiedlich große Versionen haben kann...ok, aber... gibt es noch andere Punkte? Zitat:
Ist es lediglich der Punkt der Wartbarkeit und der Punkt der Fehleranfälligkeit? Zitat:
Werde ich noch ausbauen. Zitat:
Bleibt also die Frage (wenn ich das so alles richtig verstanden habe), warum es vorteilhaft ist, auf die set...-Methoden zu verzichten und den Teil in die Haupt-Methode zu übernehmen.... Der geänderte Aufruf wäre damit dann ja quasi verbunden. |
|||||
|
|
|
|
|
Nach oben #8 |
|
Erfahrener Benutzer
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.619
|
Die setter brauchst du eigentlich nur, wenn du nach einem "set" auch andere Aktionen durchführen kannst. In deinem Fall ist der Ablauf immer der Gleiche. Du setzt die Sachen explizit und rufst dann die "generate"-Methode auf, wobei diese darauf angewiesen ist, dass im Voraus die set-Methoden erfolgreich ausgeführt wurden.
Irgendwie also doppelt gemoppelt. Setzt du die entsprechenden Daten einfach als Übergabeparameter der Methode, so hast du alles in einem Schritt parat. Sinnvoll könnte es sein, wenn du z.B. den Dateinamen setzt und danach die Dimension, welche ich übrigens als Array übergeben würde. Der Name kann dann mehrfach verwendet werden, die Dimension kannst du über die setter ändern. Kommt drauf an, was du eigentlich erreichen willst. |
|
|
|
|
|
Nach oben #9 |
|
Projektleiter
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
|
okay, das ist nachvollziehbar.
Ich werde die noch sehr übersichtliche Klasse dann mal ein wenig umstricken. Gute Frage. 1) dass das funktioniert 2) dass ich den Unterschied zwischen funktioniert und funktioniert gut lerne Vor allem aber der 2te Punkt, denn eine einfache Funktion, die die Arbeit getan hat war schon verfügbar. Nur will ich das ganze in etwas größeres einbauen können, ohne jedesmal nen Hampelmann machen zu müssen. Geändert von Jann Hendrik (03.09.2007 um 15:53 Uhr). |
|
|
|
|
|
Nach oben #10 | ||
|
Erfahrener Benutzer
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 789
|
Zitat:
Für mich stellt sich eher die Frage nach dem Sinn. Du rufst ja auch nicht bei deiner Bank an, gibst deine Kontonummer durch und legst wieder auf. 2 Minuten später rufst du wieder an und gibst einen Betrag durch, beim nächsten Anruf ein Empfänger-Konto und beim vierten Anruf sagst du dann nur noch "überweisen!" in den Hörer. Hier würde es vielmehr Sinn machen, wenn du einmal anrufst und deine eigene Kontonummer angibst. Bei jedem weiteren Anruf sagst du, was du mit diesem Konto machen möchtest: Einmal "Überweise EUR 10.000 an Kto. sowieso", dann "richte Unterkonto 008 ein", dann "Schicke mir neue TANs für 005" usw. Hier würdest du also deine Kontonummer einmalig angeben, aber den Rest der Angaben machst du je Transaktion/Auftrag erneut. (jaaa, ich weiß, das Beispiel ist ein wenig unsinnig) Du definierst also ein Objekt, das sich ausschließlich auf dein Konto bezieht. Anderes Beispiel: Du hast einen speziellen Service-Vertrag mit deiner Autowerkstatt. Dieser bezieht sich ausschließlich auf ein Auto und macht damit den Unterschied zu jedem anderen, beliebigen Besuch einer Autowerkstatt: PHP-Code:
|