[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