Jesse Erlbaum wrote:
> As you have already identified, the Model is simply a Perl module.  The most
> important thing to think of when writing a Model module is to make sure you
> make it entirely separate from the user interface.  It helps me to think of
> the methods in the Model as potentially being called from a web application,
> a cron script, or an email-based interface.  The Model should not contain
> anything specific about any of the interfaces through which it might be
> accessed.

Hi, Jesse.  I think this part is probably an evolution from the earlier 
days of CGI::Application, at least in the applications your company 
wrote for my former, now defunct, employer. :)

There was a tendency to make the CGI::Application-derived modules both M 
and V.  I'm glad to see that's less the case these days.

My current approach is to use Mason for implementing the controller and 
view, with a lot of the business logic put in the "model".  I'm probably 
going to explore using CGI::Application and either HTML::Template or 
Template Toolkit for a current side project.

Do you have a favorite approach for writing the Model objects?  At 
Investorama we created a class called TableObject that would deal with 
getting/setting values from the database, plus doing data verification 
like checking for values being present and well-formed XML in fields 
that needed it.  I still use that approach on my consulting projects. 
It's not a very complex object, and it doesn't do things recursively, 
like mapping an attribute to an object and handling that object as well.

TableObject doesn't act as a base class.  It just becomes one of the 
attributes of the object.

A typical invocation is something like this:

my %fields = (
               id => { type => 'num', pkey => 1, sequence => 'seq_users' },
               email => { type => 'string', required => 1 },
               password => { type => 'string', required => 1 },
               first_name => { type => 'string', required => 1 },
               last_name => { type => 'string', required => 1 },
               valid => { type => 'num', required => 1},
               member_id => { type => 'num' },
               );

my $table = NAIC::TableObject->new(DBH => $self->dbh,
                                    OBJECT => $self,
                                    TABLE => 'users',
                                    FIELDS => \%fields,
                                    VERIFY => 1);

$table is then put into $self as an attribute called '_table'. 
Storing/retrieving/verifying are done with $self->_table->store etc.  It 
expects that the attributes of an object like $self->email match the 
database columns.


-- 
Barry Hoggard
Tristan Media LLC
e: [EMAIL PROTECTED]
p: 212-627-1596
aim: hoggardb

Reply via email to