XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   PHP, OOP und Array Übergabe (http://xhtmlforum.de/showthread.php?t=63223)

David 21.12.2010 14:39

Interessanter Ansatz. Allerdings frage ich mich immer, ob das ganze überhaupt noch vertretbar ist aus sicht der Leistungsfähigkeit. Ich mein, man muss die Attribute erst umständlich zu einer Syntaktisch korrekten Query zusammenbauen, die schlussendlich vom SQL-Server wieder geparst wird. Außerdem müssen die ganzen Objekte ja auch zwischengespeichert werden. Ich kann mir das aber auch nur einbilden.

Ist auf jedenfall schöner als wenn man jeden einzelen Query selbst zusammenschraubt.

mantiz 21.12.2010 15:28

Zitat:

Zitat von Praktikant (Beitrag 483569)
Wie lange hast du ungefähr gebraucht bis zu deinem jetzigen Stand. Wie nah am "Ende" bist du mittlerweile?

Am Framework an sich habe ich die letzten 2 Monate gearbeitet, allerdings nicht am Stück. Vorher hatte ich bereits einen Versuch mit nahezu identischen Klassen wie aus dem Buch "PHP Design Patterns" unternommen, habe dann aber festgestellt, dass man Patterns nicht "einfach so" umsetzen sollte.
Und natürlich habe ich einige Klassen, z.B. DbQuery und Template bereits vorher schon gehabt und habe diese nur auf's Framework angepasst, sonst hätte ich entschieden länger gebraucht, da gerade die beiden Klassen für mich in der Entwicklung sehr zeitaufwendig waren.
Am Ende werde ich wohl nie sein, da das Framework eine Basis darstellen soll und sämtliche Module, die ich später mal brauche nach Möglichkeit integriert werden sollen.
Momentan baue ich 3 Seiten damit auf, eine einfache Website mit Kontaktformular, eine Bildergalerie und einen Shop.
Ich denke, wenn ich damit durch bin kann ich auf 1.0-beta gehen.
Ich neige aber dazu auch in fortgeschrittenen Zyklen Schnittstellen auf einmal über den Haufen zu werfen, so dass ich mir das gut überlegen muss. :)
Ich weiß auch noch nicht, ob ich das mal veröffentlichen will oder es auch nur mein kleines Werkzeug bleibt.

Zitat:

Zitat von David (Beitrag 483570)
Interessanter Ansatz. Allerdings frage ich mich immer, ob das ganze überhaupt noch vertretbar ist aus sicht der Leistungsfähigkeit. Ich mein, man muss die Attribute erst umständlich zu einer Syntaktisch korrekten Query zusammenbauen, die schlussendlich vom SQL-Server wieder geparst wird. Außerdem müssen die ganzen Objekte ja auch zwischengespeichert werden. Ich kann mir das aber auch nur einbilden.

Das stimmt auf jeden Fall, Performance geht verloren, aber das ist klar, anders geht's halt nicht. :)
Für mich besteht der Vorteil darin, dass ich mich nicht um so Dinge wie das quoten der Spalten oder escapen der Werte kümmern muss, weil das von DbQuery automatisch vorgenommen wird, das hilft schonmal bei der Übersichtlichkeit.
Zusätzlich bleibt man zu einem gewissen Grad portabel.

Bei einer Bildergalerie, die ich momentan entwickel gibt es z.B. ein "Image"-Model, welches von DbTable erbt. Bilder können veröffentlicht sein oder nicht, also hat das Model zwei Methoden "publish" und "unpublish" erhalten, welche ganz einfach so aussehen:
PHP-Code:

public function publish($id) {
    
$this->updateByCondition(
        array(
            
$this->primary => $id
            
'published'    => 0
        
), 
        array(
            
'published' => 1
            
'modified'  => date('Y-m-d H:i:s')
        )
    );


Das erste Array gibt die Bedingung an, das zweite die Felder und Werte, die aktualisiert werden sollen.
So reduziert sich ein reines veröffentlichen von Bildern im Controller auf:
PHP-Code:

$imageModel->publish($request->getParameter('id')); 

Der Parameter 'id' kann hier eine einzelne Id oder ein Array von Ids sein.
Andernfalls müsste man im Controller stets die korrekte Bedingung mit angeben und dafür sorgen, dass das Feld 'modified' ebenfalls aktualisiert wird.

Aber hier stellt sich eine grundsätzliche Frage, welcher jeder für sich beantworten muss: Fat-Models oder Fat-Controller? ;)
Ich tendiere zu Fat-Models.

Zitat:

Zitat von David (Beitrag 483570)
Ist auf jedenfall schöner als wenn man jeden einzelen Query selbst zusammenschraubt.

So sehe ich das auch, wobei man aber natürlich auch mit Perpared-Statements arbeiten kann.
Als ich mit meiner DbQuery-Klasse angefangen habe gab es dies in der heutigen Form in PHP aber noch nicht bzw. nur als Extra-Modul und mittlerweile habe ich mich an meine Klasse gewöhnt. ;)

David 21.12.2010 17:04

Zitat:

Zitat von mantiz (Beitrag 483566)
Beispiel:
PHP-Code:

$list $dbConnection->select()
        ->
from('table1 t1')
        ->
join('table2 t2''t2.id .''t1.id''left')
        ->
getList(); 

Zur Info:
DbConnection::select() liefert eine vorkonfigurierte Instanz meiner DbQuery-Klasse zurück.
Der Punkt bei "t2.id ." gibt an, dass es sich bei dem Wert "t1.id" um eine Tabellen-Spalte handelt, das ist für das Escapen wichtig.
Bei Mysql wird dadurch aus "t1.id" "`t1`.`id`", ansonsten würde es als String behandelt werden.

In wie fern ist das für das Escapen wichtig? Escapest Du jedes der Attribute, die Du den Methoden mitgibst, bevor du es in die Query einsetzt?

mantiz 21.12.2010 17:23

Jap, mache ich. ;)

Oben genanntes Query würde also zu:
Code:

SELECT * FROM `table1` AS `t1` LEFT JOIN `table2` AS `t2` ON `t2`.`id` = `t1`.`id`
Das war mir deshalb wichtig, da ich (besonders früher, heute nicht mehr so häufig) teilweise Spaltennamen verwende die Schlüsselwörter sind, z.B. "key" oder auch mal "table", die können dann nur gequotet verwendet werden, ansonsten gibt's 'nen Fehler und da ich mir darüber keine Gedanken machen möchte ist das dabei herausgekommen.

inta 21.12.2010 17:38

Warum schreibst du das eigentlich selbst? Erfüllen ORM wie RedBean, Doctrine oder Outlet deine Anforderungen nicht?

Zum Lernen habe ich sowas auch vor einiger Zeit mal geschrieben, aber im produktiven Einsatz würde ich kein eigenes ORM pflegen wollen.

mantiz 21.12.2010 18:22

Zitat:

Zitat von inta (Beitrag 483612)
Warum schreibst du das eigentlich selbst?

Das frage ich mich auch des öfteren. :)

Zitat:

Zitat von inta (Beitrag 483612)
Erfüllen ORM wie RedBean, Doctrine oder Outlet deine Anforderungen nicht?

Wahrscheinlich würden die meine Anforderungen größtenteils erfüllen und bei vielen Dingen weitaus mehr unterstützen.
Von den genannten hatte ich mir allerdings nur Doctrine mal genauer angesehen.

Zitat:

Zitat von inta (Beitrag 483612)
Zum Lernen habe ich sowas auch vor einiger Zeit mal geschrieben, aber im produktiven Einsatz würde ich kein eigenes ORM pflegen wollen.

Stimmt schon, es ist mit einem gewissen Aufwand verbunden.
Ich versuche möglichst viel selbst zu schreiben, weil ich dann nicht (oder nicht so häufig) überrascht werden kann.
Wahrscheinlich könnte ich mir viel Zeit sparen, wenn ich mich einfach mal in ein paar Frameworks einarbeiten würde, aber meistens finde ich irgendwelche Dinge, die mir nicht gefallen und dann muss ich entweder damit arbeiten und ärgere mich ständig darüber oder ich muss einen Workaround finden. ;)

Bitte nicht falsch verstehen, ich finde die Frameworks fast alle super, es ist nur nicht so ganz meins, ich fühle mich bei Eigenentwicklungen einfach wohler.
Ist aber nicht bei jedem so und das ist auch gut so.

laborix 21.12.2010 20:21

Zitat:

Zitat von mantiz (Beitrag 483627)
... aber meistens finde ich irgendwelche Dinge, die mir nicht gefallen und dann muss ich entweder damit arbeiten und ärgere mich ständig darüber oder ich muss einen Workaround finden. ;)

... ich fühle mich bei Eigenentwicklungen einfach wohler. ...

Einer der Gründe, warum ich versuche mit OOP ein eigenes CMS für mich zu entwickeln.

[OT]
Der wichtigste Grund ist bei mir die SQL Datenbank, irgendwie mag ich die Dinger nicht.

Beispiel:
Flatfile bietet die Möglichkeit, Daten zwischen Web, Net-/Notebook und USB-Stick per copy&paste portabel zu machen. Mit SQL geht das nur per aufwändigen Export/Import und ich kann nicht die Betriebssystem Suche zum Durchsuchen von Dateiinhalten verwenden.
[/OT]

Egal, lernen ist angesagt und dieser Thread zeigt wirklich gute Denkanstöße :)

inta 21.12.2010 20:47

Zitat:

Zitat von laborix (Beitrag 483639)
Flatfile bietet die Möglichkeit, Daten zwischen Web, Net-/Notebook und USB-Stick per copy&paste portabel zu machen. Mit SQL geht das nur per aufwändigen Export/Import und ich kann nicht die Betriebssystem Suche zum Durchsuchen von Dateiinhalten verwenden.

Die Portabilität hast du auch mit SQLite, nur die Durchsuchbarkeit wohl (noch) nicht.

paracelsus 21.12.2010 20:49

OT
Leute, ich werde alt. Ich habe nicht den geringsten Tau, was ihr da redet. Ich mag php - sogar recht gerne - aber redet ihr eine andere Sprache hier? - im Vergleich mit euch fühle ich mich wie ein 386er Intel ...
Bin schon wieder wech ...
/OT

David 21.12.2010 22:03

Meinst Du den Objekt-orientierten talk? Davon versteh ich auch nicht wirklich viel. Das ganze ist interessant, klar. Aber die abstrakten Denkweisen muss man erstmal verstehen lernen. Das schaff ich seit zwei Jahren nicht. (Hab aber auch nicht wirklich dran gehangen).


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:36 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2021, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2020