Hi,

I like the reasoning and am trying to work with it at the moment. So how might 
these table and model class files best be organised? Should I put the table 
classes and the model classes in the same directory or should I try and 
separate them out? eg.

|-- controllers
|-- models
|   |-- business
|   |   |-- Image.php
|   |   |-- Images.php
|   |   |-- User.php
|   |   `-- Users.php
|   |-- rdb
|   |   |-- Images.php
|   |   `-- Users.php
|   `-- xml
`-- views


I guess that also means more path hassles too but maybe tidier?

Regards,
Mark Maynereid



On Tuesday 10 July 2007 17:20, Bill Karwin wrote:
> I agree with the other statements that best practices include making
> Model classes that are decoupled from database table representations.
>
> The assumption that there's a one-to-one mapping between Models and
> Tables is more or less a characteristic of Ruby.  We can see many
> examples where this assumption does not hold true.  Adding methods to a
> concrete Table class to join to secondary tables, combine data with
> other logic or data, etc. doesn't seem like the right solution.
> Instead, a Table class should provide a general interface to a single
> Table, and you should use one or more such classes in a given Model
> class.
>
> Take for example a case where a given database table is used in multiple
> controller actions, but it is used in different ways.  One fetches a
> paged result set, another gets a count of rows, etc.  Should you make a
> Model that extends Zend_Db_Table_Abstract and use it in all cases?  You
> may have to add many methods to do custom behavior, even if only one of
> these methods is applicable to a given action.  It starts to resemble
> the God Object antipattern (http://en.wikipedia.org/wiki/God_object).
>
> Instead, make a Table class as generic as possible; all it does is
> provide an interface to query the database table.  Then create multiple
> separate Model classes, which use the Table class in specific ways.
> Then it becomes a lot easier to structure a Model that needs to access
> multiple tables, or a feed, or a file on disk, etc.
>
> Also keep in mind that Models are not just about data.  They may need to
> perform other business logic, and this might not correspond to any
> database table.
>
> Regards,
> Bill Karwin

Reply via email to