[thor] Fwd: RE: Horde Customisation and additions
Carlos Pedrinaci
cpedrinaci at yahoo.es
Fri Jul 22 01:14:17 PDT 2005
Chuck Hagenbuch wrote:
>Quoting Carlos Pedrinaci <cpedrinaci at yahoo.es>:
>
>
>
>>I was wondering about what this RDO stuff was.
>>Actually I had a look at the code and it seemed to be the kind of stuff
>>I *really* like but I wasn't sure about your intentions and... well..
>>given that you wrote once "don't ask and wait until its done".. I was
>>waiting :)
>>
>>So.. now I have a nice excuse for asking :)
>>
>>
>
>Yup, I brought it up first. And people have been almost shockingly good
>about not asking, so... :)
>
>RDO stands for Rampage Data Objects. Rampage is the name I thought up
>to replace Catalyst, which is what I wanted to call a set of php5
>components for Horde, but someone already took Catalyst.
>
>The Data Objects part is pretty similar to things like DB_DataObject
>and Propel, but with a horde-ish slant and of course my own opinions:
>
>- API does not include direct SQL anywhere. Idea is to allow backends
>like LDAP, XML files, etc.
>
>- Doesn't require writing XML to describe your whole database or doing
>other heavy java-ish things
>
>
Sounds nice, I'm curious on how you do it.
>The reason to write RDO for Horde is that, looking at Horde
>applications, one of the things we do over and over again for every
>Horde app is data access code. Write the Driver class, write the
>Driver_sql, maybe a few others. For a while I thought we could use
>DataTree to avoid that, but DataTree is kind of awkward to use and it
>slows down tremendously. RDO should be much faster, and hopefully more
>intuitive to use, too.
>
>
>
Yep these are definitely inconvenients of the DataTree stuff.
>Here's some working code:
>
>require_once 'Horde/Rampage.php'; // load php5 autoloader
>
>class User extends RDO {}
>
>class UserMapper extends RDO_Mapper {
>
> protected $container = 'users';
>
> public function getStorage() {
> return RDO_Storage::singleton('pgsql', array(connection params));
> }
>
>}
>
>$um = new UserMapper();
>$count = $um->count(); // count # rows in users table
>
>if (!$um->exists(1)) {
> // does the user with primary key (automatically determined from the db)
> // exist?
>}
>
>// look for alice and create her if not found
>$alice = $um->find(RDO::FIND_FIRST, array('name' => 'Alice'));
>if (!$alice) {
> $alice = $um->create(array('name' => 'Alice', ...));
> var_dump($alice->getFields()); // $alice is a User object now
>}
>
>// change Alice
>$alice->name = 'Alicia';
>$alice->save();
>
>// list all users
>foreach ($um->find(RDO::FIND_ALL) as $user) {
> echo $user->name . "\n";
>}
>
>
>All of that currently works - the above code plus a "users" table with
>a primary key is all you need.
>
>
>
At first glance this looks pretty easy to use.
I just wonder how hierarchies will work/be using RDO. I will check the
code.. You might have found the test bed for RDO :)
I'll give it a go when I'll get the time to do it.
-- Carlos
More information about the thor
mailing list