http://www.perlmonks.org?node_id=535230

Ovid has asked for the wisdom of the Perl Monks concerning the following question:

For the past couple of years, I've been working in shops which use custom object-relational models that have been written in-house. As a result, I'm a bit out of the loop in the latest and greatest OOP tools in Perl. What can you recommend and why? I'm wondering about ease of use, scalability, use with existing schemas, portability, etc.

I know about the POOP page, but it's sadly out of date.

Cheers,
Ovid

New address of my CGI Course.

2006-03-09 Retitled by planetscape, as per Monastery guidelines
Original title: 'OOP Recommendations'

Replies are listed 'Best First'.
Re: Object-relational Recommendations
by perrin (Chancellor) on Mar 08, 2006 at 19:24 UTC
    Rose::DB::Object is looking good to me these days. It can handle pretty complex queries and lets you use SQL if you need to. It also appears to be much faster than the others on a benchmark written by the author. I haven't used it in production code yet though.

      A ditto there from me. Rose::DB::Object looks to me to be the best of the newer generation of ORM systems, and I'm going to be trying it in production as soon as I get an opportunity.

Re: Object-relational Recommendations
by dragonchild (Archbishop) on Mar 08, 2006 at 19:15 UTC
    I'm currently working on a new Object datastore built on DBM::Deep that will provide near-transparent persistence for objects. While this won't scale into the Ebays of the world, it will do nicely for 90% of the apps that currently use an ORM.

    If you're interested, I can have an alpha version up in a week or so.


    My criteria for good software:
    1. Does it work?
    2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?

      I am definitely interested. While scalability is important, that applies to developer productivity as well as raw performance. Plus, I view it as only one of many considerations. The fastest, easiest to use ORM is useless if it doesn't run on the DBMS I'm using, if it's so buggy that it's unreliable, or if I can't retrofit it to pre-existing schemas.

      Cheers,
      Ovid

      New address of my CGI Course.

        Presto won't run on an RDBMS. It runs on DBM::Deep. It will have a query structure, but there will be no SQL anywhere near this thing.

        My criteria for good software:
        1. Does it work?
        2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?
Re: Object-relational Recommendations
by shiza (Hermit) on Mar 08, 2006 at 19:54 UTC
    I've heard a lot of good things about Rose::DB and DBIx::Class, but unfortunately do not have any real experience with either.

    However, I do have a good deal of Class::DBI and Alzabo experience. Although, Class::DBI has its limitations, it works well for simple designs. On the other hand, Rose::DB is faster and I've heard DBIx::Class is basically Class::DBI's 'replacement'.

    I don't really hear too much about Alzabo and it seemed like a somewhat elegant framework and can be a little more involved than your typical ORM. It keeps a cache of your schema, which means changes require a reload. I've built some cool applications using it. I cannot attest to its scalability, however. The biggest app I built with it was on the low-to-mid size, but worked like a champ.
Re: Object-relational Recommendations
by xdg (Monsignor) on Mar 08, 2006 at 20:07 UTC

    The latest edition of Advanced Perl Programming mentions Pixie. I haven't used it, but it looks very straightforward. Note, it's not relational -- just persistent, but that may be sufficient for some applications.

    -xdg

    Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

Re: Object-relational Recommendations
by phaylon (Curate) on Mar 08, 2006 at 22:10 UTC
    I'm mostly using DBIx-Class these days, which was started because of Class-DBIs shortcomings. One of the newer features I love most is the SQL-Translator support. You can create DDL statements out of a schema design in Perl. But it should be also possible to create your schema classes by pointing it to an existing schema, tho I haven't used that yet. A big pro is the active community and the easyness of patch- and feature-submission.

    I haven't met a join I couldn't form in native DBIC, rather than using SQL directly, but you might want to ask #dbix-class on irc.perl.org for your specific needs. Extending your classes is also rather easy by overloading specific methods (new, insert, update, delete, etc.)

    Ordinary morality is for ordinary people. -- Aleister Crowley