[Erledigt] Erweiterung GORM (Release 1.11)

Dieser Bereich dient dazu, neue Features zu diskutieren und für die Entwicklung zu dokumentieren. // This area is dedicated to new features including proposals and documentation.
Gesperrt
Benutzeravatar
dr.e.
Administrator
Beiträge: 4552
Registriert: 04.11.2007, 16:13:53

[Erledigt] Erweiterung GORM (Release 1.11)

Beitrag von dr.e. » 29.07.2009, 23:28:21

Hallo zusammen,

wie unter Fragen zum Usermanagement-Modul diskutiert, sollen vom GORM gespeicherte Objekte mit einer Referenz auf die Datenbank-Zugriffsschicht und der ID des Objekts in der Datenbank ausgestattet werden.

Folgender Code soll nach der Erweiterung die ID des Benutzers ausgeben:

Code: Alles auswählen

$user = new GenericDomainObject ('User');
$user->setProperty('Foo','bar');
$orm->saveObject($user);
echo $user->getProperty('UserID);
Damit ist es auch möglich im Usermanagement-Modul einen so gespeicherten Benutzer einer Gruppe mit dem folgenden Code zuzuweisen:

Code: Alles auswählen

$user = new GenericDomainObject ('User');
$user->setProperty('Foo','bar');
$umgtMgr->saveUser($user);
$group = $umgtMgr->loadGroupByID(2);
$umgtMgr->assignUser2Groups($user,array ($group));
Für Anregungen und Ergänzungen steht der Thread zur Diskussion bereit.


Viele Grüße,
Christian
Viele Grüße,
Christian

Benutzeravatar
dr.e.
Administrator
Beiträge: 4552
Registriert: 04.11.2007, 16:13:53

Re: Erweiterung GORM (Release 1.11)

Beitrag von dr.e. » 09.08.2009, 23:02:11

Hallo zusammen,

ich habe das Feature testweise mit dem letzten Checkin schon vorbereitet. Bei der direkten Verwendung GORM sollte das also nun möglich sein. Den Rest ziehe ich für Release 1.11 nach.

Bitte um Feedback!

Viele Grüße,
Christian
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: Erweiterung GORM (Release 1.11)

Beitrag von MrNiceGuy » 10.08.2009, 08:28:49

Funktioniert bei mir. Schonmal mindestens eine Code-Zeile weniger :) Allerdings habe ich da noch eine Frage zum umgt: Ist es möglich auch hier weitere Tabellendefinitionen nachzuladen? Ich würde nämlich gerne vermeiden, dass ich erst den neuen Benutzer über den umgtManager und danach nochmal über den normallen ORMapper speichern muss, damit eine Verknüpfung zu umgt-fremden Tabellen möglich ist!? Folgender Code funktioniert nämlich nicht:

Code: Alles auswählen

            // EMail-Checksum speichern
            $objectUser->addRelatedObject ('User2EMailChecksum',
                                           $objectEMailChecksum
                                           );

            // Speichern der Benutzerdaten
            $integerApplicationID = $objectUserManager->saveUser ($objectUser);
folgender dahingehend schon:

Code: Alles auswählen

            // CMS-DB-Struktur laden
            $objectCMSMapper = $objectORMFactory->getGenericORMapper ('modules::cms',
                                                                      'cms',
                                                                      'cms'
                                                                      );

            // UMGT-DB-Struktur laden
            $objectCMSMapper->addMappingConfiguration ('modules::usermanagement',
                                                       'umgt'
                                                       );
            $objectCMSMapper->addRelationConfiguration ('modules::usermanagement',
                                                        'umgt'
                                                        );

// [...]

            // Speichern der Benutzerdaten
            $integerApplicationID = $objectUserManager->saveUser ($objectUser);
echo 'UserID: '.$objectUser->getProperty ('UserID').'<br />';
echo 'ApplicationID: '.$integerApplicationID;

            // EMail-Checksum speichern
            $objectUser->addRelatedObject ('User2EMailChecksum',
                                           $objectEMailChecksum
                                           );

            $objectCMSMapper->saveObject ($objectUser);
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4552
Registriert: 04.11.2007, 16:13:53

Re: Erweiterung GORM (Release 1.11)

Beitrag von dr.e. » 10.08.2009, 09:07:49

Hallo Lutz,

freut mich, dass es wie gewünscht funktioniert. Über die zweite Erweiterung werde ich mir nochmal Gedanken machen. Man könnte beispielsweise die Möglichkeit schaffen, den umgtManager noch weitere Mapping- und Relation-Konfigurationen mitgeben zu können. So kann er zu einer größeren Business-Komponente werden. Problem dabei ist jedoch, dass er dann schnell zur "uncle bob"-Komponente wird und das ist nicht mehr OO. An sich sollte deshalb deine Applikation eine weitere Business-Komponente haben, die sich um E-Mail kümmert und ein User-Objekt als Argument erwartet.

Viele Grüße,
Christian
Viele Grüße,
Christian

Benutzeravatar
MrNiceGuy
Beiträge: 749
Registriert: 03.02.2009, 16:49:42
Wohnort: Nienburg / Weser

Re: Erweiterung GORM (Release 1.11)

Beitrag von MrNiceGuy » 10.08.2009, 09:22:54

Das mag sein, ich wollte aber eigentlich vermeiden, dass ich neben dem umgtManager noch den GORM manuell laden muss, um eine EMail, die ja in gewisser Weise einem User zugeordnet wird, zu speichern. Aber macht auch nichts, ich habe bereits meine vom umgtManager abgeleitete Klasse dahingehend erweitert, dass ich jetzt manuell weitere Tabellendefinitionen hinzufügen kann. Ich brauche das schon das Eine oder Andere Mal, da ich das umgt-Modul halt etwas erweitert habe und dafür ist es so halt praktisch, da ich a) nicht den umgtManager neu programmieren muss und b) meine Erweiterungen ohne umständlichen zusätzlichen Mapper mitverwaltet werden können. Für Komponenten, die mit dem umgt ansich nichts zu tun haben nutze ich das ja auch alles nicht, nur für Objekte, die einem benutzer zugeordnet werden wie eben die EMail-Checksum zur Bestätigung der EMail-Adresse :)
There are only 10 Types of people in the world:
Those who understand binary and those who don't.

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Erweiterung GORM (Release 1.11)

Beitrag von Megger » 27.08.2009, 10:34:34

Ein gutes Feature wäre noch das Unterstützen von Transaktionen. Ist aber sicher eine aufwendige Erweiterung.
Sodass ich Dinge wieder rückgängig machen kann und trotzdem mir Daten in die Datenbank speichern kann.

Also ich starte eine Transaktion, führe verschiedene Datenbankbefehle aus und kann bei einem Fehler diese Datenbankbefehle wieder rückgängig machen. Im Erfolg stoppe ich einfach die Transaktion und schon werden die Daten permanent in die Datenbank geschrieben.

Transaktionen werden aber glaube ich nicht von MyISAM unterstützt und das APF legt nur MyISAM Tabellen an, oder?
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Benutzeravatar
dr.e.
Administrator
Beiträge: 4552
Registriert: 04.11.2007, 16:13:53

Re: Erweiterung GORM (Release 1.11)

Beitrag von dr.e. » 27.08.2009, 11:29:31

Hallo Megger,

die MyISAM-Storage-Engine unterstützt keine Transaktionen. Hier muss man im Setup INNODB oder ein Equivqlent dazu angeben. Grundsätzlich sollte die Umsetzung jedoch nicht so komplex werden, da lediglich der Aufruf von saveObject() dies unterstützen muss. Sofern die Storage-Engine nested transactions unterstützt, könnte man sogar sehr granulare Transaktionen eröffnen (=Speicherung eines Objekts, bzw. einer Beziehung). Ich merke mir das vor und überlege mir im Rahmen von 1.11, wie das realisiert werden könnte.
Viele Grüße,
Christian

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Erweiterung GORM (Release 1.11)

Beitrag von Megger » 31.08.2009, 16:16:47

Ich freue mich schon jetzt auf das 1.11 Release.

Ich denke mit den Transaktionen kann man das System noch ein bisschen besser steuern um damit zu arbeiten. Ansonsten müsste man dann immer von Hand die Datenbank bereinigen, oder die eigentlichen Daten für die Datenbank erstmal in einer Session zu speichern oder so.
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

trx
Beiträge: 23
Registriert: 12.08.2009, 13:16:46

Re: Erweiterung GORM (Release 1.11)

Beitrag von trx » 29.09.2009, 20:45:00

Als Thema für Erweiterungsvorschläge würde ich gerne noch aus gegebenem Anlass einen Vorschlag in den Raum werfen.
Wie sieht es aus den GORM für Volltextsuchenfähig zu machen, um eine Volltextsuche per CriterionObject zu ermöglichen?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4552
Registriert: 04.11.2007, 16:13:53

Re: Erweiterung GORM (Release 1.11)

Beitrag von dr.e. » 29.09.2009, 21:17:26

Hi trx,

an sich ist das quasi schon möglich. Hierbei müsste man aber das Such-Statement selbst schreiben und könnte dann die Ergebnisse über den GORM beziehen. Suche ist jedoch ein sehr spezielles Thema, das je nach Ausprägung sehr einfach oder verdammt kompliziert ist. Letzteres vor Allem, wenn mehrere Suchtöpfe mit unterschiedlichen Inhalten und gegenseitigen Gewichtungen existieren. Hier sollte man ein deutlich spezialisierteres Tool nutzen - z.B. Lucene. Zur Anbindung könnte man ohne weiteres die PHP-JAVA-Bridge oder einen Webservice nutzen. Zend_Search_Lucene aus dem Zend Framework bietet zwar auch eine native PHP-Implementierung (sich auch binärkompatibel ist), jedoch ist die Performance deutlich schlechter als die JAVA-Variante.

Fazit: ich persönlich würde aus Geschwindigkeits-Gründen nicht auf das GenericCriterionObject setzen. Gründe:
a) Es ist immer langsamer als ein natives Statement.
b) Es gibt spezialisierte Tools.
Zudem ist ein Such-Statement nicht so schwer zu schreiben, wenn die Datenstruktur gut gewählt ist. Für die APF-Seite habe ich eine Datenstruktur wie unter Volltextsuche - phpbar.de beschrieben gewählt.
Viele Grüße,
Christian

trx
Beiträge: 23
Registriert: 12.08.2009, 13:16:46

Re: Erweiterung GORM (Release 1.11)

Beitrag von trx » 29.09.2009, 22:51:20

Ok, meine Suche wird sich auch nicht wirklich komplex gestalten, werde noh mal überlegen wie ich das machen werde.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4552
Registriert: 04.11.2007, 16:13:53

Re: Erweiterung GORM (Release 1.11)

Beitrag von dr.e. » 11.10.2009, 22:56:59

Hallo zusammen,

da die aktuelle Planung für 1.11 etwas sportlich ist, verschiebe ich das Thema Transaktionen auf die Version 1.12. Grund hierfür sind die Anpassungen des Usermanagement (Form-Taglib-Refactoring) und die Tatsache, dass die Implementierung der Datenbank-Update-Komponente des GORM länger als erwartet gedauert hat.

Damit ist zu Lasten eines Features sichergestellt, dass das Release noch in diesem Jahr zusammen mit einer überarbeiteten DOkumentation und einem neuen, umfangreichen Artikel zum Thema Gästebuch-Implementierung erscheint. Sollte jemand das Feature schrecklich vermissen, einfach melden. :)
Viele Grüße,
Christian

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast