> > An interesting thing to note is that a Row Data Gateway acts very > similarly to the ActiveRecord; the primary difference is that an > ActiveRecord object contains the data access logic, while the Row Data > Gateway leaves that aspect to its parent Table Data Gateway, proxying to > it. When it comes down to it, for most cases you'll use them in almost > exactly the same way -- which I think is what you were getting at in > that last sentence. >
That's true, but when people talk about wanting Active Record support, they're generally talking about wanting a Rails-like implementation. That includes the ability to add simple validation rules easily. -Matt On Thu, Nov 6, 2008 at 8:13 AM, Matthew Weier O'Phinney <[EMAIL PROTECTED]>wrote: > -- Paul M Jones <[EMAIL PROTECTED]> wrote > (on Thursday, 06 November 2008, 09:26 AM -0600): > > > > On Nov 6, 2008, at 08:37 , Matthew Weier O'Phinney wrote: > > > > > -- Steve Klabnik <[EMAIL PROTECTED]> wrote > > > (on Thursday, 06 November 2008, 09:23 AM -0500): > > > > On Wed, Nov 5, 2008 at 6:23 PM, Matthew Weier O'Phinney > > > > <[EMAIL PROTECTED]> > > > > wrote: > > > > > > > > There's not. I'm not entirely sure why Zend_Db_Table does not > > > > implement > > > > this, though my understanding is that there are some sound > > > > architectural > > > > reasons not to do so. I've often created such a method myself, > > > > though, > > > > > > > > > > > > > > > > Again, there's not, and again, uncertain as to why. I've often > > > > implemented such functionality for my own models, however. > > > > > > > > > > > > I'm pretty sure that Cake tries to emulate the ActiveRecord pattern, > > > > and Zend does not. I did a quick search, and it seems like some > > > > ActiveRecord-ish stuff was proposed for Zend back in 2006, but never > > > > took any ground? > > > > > > Yes. The reason was that PHP currently does not support a pure > > > ActiveRecord implementation due to lack of late static binding (LSB -- > > > which will be available in PHP 5.3.0). > > > > "Pure" is in the eye of the beholder. ;-) > > > > The Rails Active Record implementation uses static finder methods, and > > Cake tries to emulate that using instance methods. Fowler [1] notes > > that static finder methods "typical", but he goes on to say: > > > > "However, there's no reason that you can't separate out > > the find methods into a separate class, as I discussed > > with Row Data Gateway (152), and that is better for > > testing." > > > > So it seems perfectly acceptable, from an implementation and "purity" > > point of view, to have a Table Data Gateway (the finder) return Active > > Records. > > > > Regardless of the *name* of the row class, if it can contain business > > logic that operates on the row, it can fairly be called an active record > > implementation. > > Right. I was just stating the officially stated reason for why > ActiveRecord wasn't included originally. :) > > An interesting thing to note is that a Row Data Gateway acts very > similarly to the ActiveRecord; the primary difference is that an > ActiveRecord object contains the data access logic, while the Row Data > Gateway leaves that aspect to its parent Table Data Gateway, proxying to > it. When it comes down to it, for most cases you'll use them in almost > exactly the same way -- which I think is what you were getting at in > that last sentence. > > > (FYI, Solar <http://solarphp.com> works in a similar manner, with a > > table/model class to represent the table, and a record class to > > represent the resulting record (and its related records, if any). I > > might argue that the Solar implementation is more sophisticated, but > > I've self-promoted enough at this point. ;-) > > For the record, for those of you newcomers... PMJ's Solar project is > top-notch. Additionally, PMJ worked at Zend for a short while, and > contributed the original Zend_View and Zend_Db_Table implementations to > ZF. Just thought I should give credit where credit is due. :) > > -- > Matthew Weier O'Phinney > Software Architect | [EMAIL PROTECTED] > Zend Framework | http://framework.zend.com/ >
