php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 2 Stimmen, 5,00 durchschnittlich.
Alt 06.06.2011, 10:35  
Neuer Benutzer
 
Registriert seit: 05.03.2011
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
laszlokorte befindet sich auf einem aufstrebenden Ast
Standard [Vorstellung] Dataphant ORM

Hallo zusammen,

ich würde gerne das ORM vorstellen, was ich in der zweiten Hälfte des letzten Jahres entwickelt, dann aus Zeitmangel erstmal auf Eis gelegt und nun doch mal auf Github gepusht habe.
ich habe keinen Foren-Bereich gefunden, in das besser rein passen würde.
Falls ich hier falsch bin, einfach verschieben.

https://github.com/laszlokorte/Dataphant

Im Prinzip steht alles wichtige in der Readme Datei (und in der demo.php). Ansonsten ist die Dokumentation leider noch sehr bescheiden.

Eines meiner lieblings-Features ist das Smart-Eager-Loading. Damit wird dafür gesorgt, dass die Query-Anzahl nicht exponentiell, sondern linear steigt, wenn man Queries in For-Schleifen schachtelt.
An Ruby's Datamapper hat mir das schon sehr gefallen, wobei es dort nur bei einer Verschachtelung von bis zu zwei Schleifen funktioniert hat. Ich habe da noch einiges weitergebastelt, sodass eine beliebige Tiefe an Verschachtelung unterstützt wird.

Evtl gefällt es ja jemandem und vielleicht hat ja jemand interesse daran, es weiter zu entwickeln, weiter zu testen, zu dokumentieren oder sonst was mit anzustellen.
Pull-Requests sind herzlich willkommen.

Ich würde mich auch über Feedback freuen.

Falls es interessiert noch etwas zu der Entstehungsgeschichte:

Das ganze ist daraus entstanden, dass ich ein ORM in Php brauchte, mich die beien großen Doctrine und Propel aber absolut nicht ansprachen, bzw meine Erwartungen und Anforderungen an die Bequemlichkeit, die nach langem Arbeiten mit Datamapper und ActiveRecord in Ruby recht hoch waren, nicht erfüllten. (Nicht die Design-Patterns, sondern die gleichnamigen Libraries in Ruby)

Da ich eigentlich sowieso weg von Php wollte, hatte ich auch nicht lange weitergesucht, sondern schon aufgegeben, dass es überhaupt möglich ist, mit dem in Php zugrundeliegenden Objekt-Modell etwas zu bauen, was dem Ruby Datamapper nahe kommt.

Was mich dann geritten hat, weiss ich nicht mehr, allerdings habe ich angefangen die Datamapper-Library in Php nachzubauen. Relativ schnell war einerseits klar, dass ich vieles anders umsetzen musste, weil das statische Klassenmodell von Php einiges, was in Ruby an der Tagesordnung steht, nicht erlaubt. Nachdem irgendwann die ersten Queries funktionierten und sogar einige Features besser funktionierten als im Ruby-Datamapper, hab ich immer weiter und weiter gebastelt, obwohl ich an tausend anderen Stellen immer wieder riesige Kompromisse eingehen musste.

Als das ganze dann so gut wie fertig war und sich auch schon richtig gut benutzen liess, hatte ich nicht mehr so viel Zeit weiter zu machen. Die Motivation weiter zu machen ging stetig gegen Null, bis ich das ganze bei Seite legte und eigentlich schon einstampfen wollte.

Nun musste ich aber vor ein paar Wochen wieder mit Doctrine arbeiten und da wurde mir klar, wie viel spaßiger es war mit meinem ORM Queries zu bauen und wie nervig es ist DQL-zeug schreiben und sich um den ganzen scheiss wie Query senden, Daten fetchen und so weiter kümmern zu müssen.

Daher habe ich mir jetzt doch noch mal ein Herz genommen, mein ORM ein wenig aufgeräumt, ihm den Namen Dataphant verliehen und auf Github gepusht.

Geändert von laszlokorte (06.06.2011 um 10:57 Uhr).
laszlokorte ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 06.06.2011, 13:49  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Werd ich mir bestimmt mal näher ansehen. Schade nur, dass gefühlt so viel static verwendet wird. Ist IMHO unnötig.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 06.06.2011, 14:36  
Neuer Benutzer
 
Registriert seit: 05.03.2011
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
laszlokorte befindet sich auf einem aufstrebenden Ast
Standard

Das static Zeug gefällt mir auch nicht, ist aber anfangs unter dem Fokus auf einfache Query-Konstruktion entstanden. Müsste man, wie es auch schon auf der Todo steht, in ein ModelDefinition-Objekt auslagern.

Die static-Syntax, also dass man User::nickname() und User::defineProperty() aufrufen kann, ist aber beabsichtigt, da ich auf keinen Fall auf so Zeug wie Annotations zurückgreifen will, aber es möglich sein soll, nur eine Klasse pro Model zu benutzen und nicht wie z.B. in Doctrine in Repository, Entity und Manager aufzuteilen zu müssen.

Da es mit Doctrine u.Ä. ja schon im Java-Stil absolut sauber implementierte Systeme gibt, habe ich extra an einigen Stellen ein Auge zugedrückt, um die DSL zu vereinfachen.
laszlokorte ist offline   Mit Zitat antworten
Alt 08.06.2011, 14:42  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Sieht auf den ersten Blick ganz cool aus. Man sieht aufjedenfall, dass es von DataMapper /ActiveRecord inspieriert ist
Das mit den statischen Aufrufen wie User::defineProperty() finde ich eigentlich ziemlcih elegant gelöst und wüsste nicht wie es in PHP schöner - aber gleich einfach - geht.
Sowas:
Group::hasAndBelongsToMany('comments', array('class' => 'Comment', 'through' => 'users'));
ziehe ich jedenfalls allemal irgendwelchem Geraffen mit OneToMany und ManyToOne Annotations vor.
Cool gemacht!

Ich würde die Doku aber definitiv noch etwas pimpen um zu zeigen was es alles kann. Vielleicht auch ein kleines Kapitel für Ruby Umsteiger á la "so geht's in ActiveRecord und so geht's mit Dataphant).
__________________
Today you...Tomorrow me.
agrajag ist offline   Mit Zitat antworten
Alt 08.06.2011, 20:58  
Neuer Benutzer
 
Registriert seit: 05.03.2011
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
laszlokorte befindet sich auf einem aufstrebenden Ast
Standard

@agrjag: Freut mich, dass es dir gefällt. Sobald ich zeit habe, werde ich auf jeden Fall noch an einer besseren Dokumentation arbeiten.

Die Idee mit dem Umsteiger-Guide finde ich gut, auch wenn ich nicht mit vielen Ruby->Php Umsteigern rechne
laszlokorte ist offline   Mit Zitat antworten
Alt 09.06.2011, 02:00  
Moderator
 
Benutzerbild von agrajag
 
Registriert seit: 02.10.2006
Beiträge: 3.820
PHP-Kenntnisse:
Fortgeschritten
agrajag wird schon bald berühmt werdenagrajag wird schon bald berühmt werden
Standard

Umsteiger wahrscheinlich nicht. Aber Leute die was mit PHP machen (müssen), ActiveRecord kennen und deshalb von Doctrine und Co. frustriert sind
__________________
Today you...Tomorrow me.
agrajag ist offline   Mit Zitat antworten
Alt 09.06.2011, 10:22  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.657
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Sieht auf den ersten Blick nicht schlecht aus. Was mich persönlich stört ist die Definition von Daten-Objekten im Code (Attribute, ...) und die vielen statischen Verwendungen. Letzteres ist hinsichtlich der Testbarkeit nicht Vorteilhaft.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 12.06.2011, 06:41  
Neuer Benutzer
 
Registriert seit: 05.03.2011
Beiträge: 16
PHP-Kenntnisse:
Fortgeschritten
laszlokorte befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Was mich persönlich stört ist die Definition von Daten-Objekten im Code (Attribute, ...)
Meinst du etwa, dass Modell-Attribute und -Relationen in php statt in einer Config-Datei definiert werden?
laszlokorte ist offline   Mit Zitat antworten
Alt 12.06.2011, 11:20  
Erfahrener Benutzer
 
Registriert seit: 30.07.2008
Beiträge: 1.167
PHP-Kenntnisse:
Fortgeschritten
xm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphärexm22 sorgt für eine eindrucksvolle Atmosphäre
Standard

Denke ich auch. Ich mag es auch eher weniger, die ganze Config in Form von Code schreiben zu müssen, statt z. B. das Ganze über ein Array konfigurieren zu können.
xm22 ist offline   Mit Zitat antworten
Alt 12.06.2011, 13:11  
Erfahrener Benutzer
 
Registriert seit: 11.04.2011
Beiträge: 260
PHP-Kenntnisse:
Fortgeschritten
lcrash wird schon bald berühmt werden
Standard

Vorteil von PHP-Code gegenüber YAML, Ini, XML etc. ist, dass er schneller ist. Was nicht heißt, dass man nicht aus solchen Dateien eine foobar.php.dist zaubern kann.
lcrash ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
dataphant, smart eager loading, datamapper german validation messages, das orm ist mit mir, doctrine vs propel vs datamapper orm, write php orm, php orm, dataphant demo php, umsetzen von eager loading php, datamapper activerecord

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:55 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum