FWIW ... : what I've noticed about using models (or not) ... :

1. the advantage of using a model mostly seems to be that it
autoloads, and then is accessible everywhere from $c. Otherwise, there
doesn't seem to be much difference from just having a normal perl
library.

2. so if you just need data/logic for use in one controller, a
standard library may be better.

3. usually, I'm finding its better to try to keep the models as pure
data sources, and not have them interact, or be context dependent. So
I try to make it the controllers job to do anything that involves
context, or to connect different models together where necessary. That
seems to result in a cleaner API. I have started writing modules that
took $c as an argument, but generally took it out later.

4. of course there are exceptions ... which is why a framework that
has flexibility and power is worth investing time to learn, even if it
takes longer than one that says "we do it this way around here ..."

this is just ideas that I've seen starting to emerge from many
learner's mistakes ... others will know different / better ...


On 12/28/06, A. Pagaltzis <[EMAIL PROTECTED]> wrote:
* Jonathan Rockway <[EMAIL PROTECTED]> [2006-12-27 21:25]:
> No, it's not.  Creating an object in Perl amounts to setting a
> flag (the OBJECT flag in subclasses of SvPVMG, to be exact).
>
> See illguts: http://gisle.aas.no/perl/illguts/

Are you being too literal on purpose? Yeah blessing a ref is just
setting a flag but you need a referee for that ref and people
don't consider its creation a separate step in general.


* Mark Zealey <[EMAIL PROTECTED]> [2006-12-27 17:20]:
> On Wednesday 27 December 2006 1:01 pm, Ash Berlin wrote:
> > Very very *VERY* bad idea.
> >
> > __PACKAGE__->mk_accessors(context);
> >
> > sub ACCEPT_CONTEXT {
> >    my ($self, $c, @args) = @_;
> >
> >    my $new = bless({ %$self }, ref $self);
> >    $new->context($c);
> >    return $new;
> > }
>
> Isn't that really really slow though? Constructing a new object
> for each call?

Well, it depends. If you call `$c->Model('Log')` a ton of times,
then it will indeed be slow. If you don't, you won't notice.

If you've *determined* from profiling that `$c->Model('Log')` is
called enough to be a bottleneck, you have two options. The
trivial one is that to store the object returned in a variable
and then make your logging calls on that variable, so you don't
go through `ACCEPT_CONTEXT` constantly. The other is to memoise
`ACCEPT_CONTEXT` so when it's passed the same `$c`, it always
returns the same copy. You'll have to be very careful about your
cache though; it's easy to introduce leaks. If Catalyst depends
critically on object destruction timing, you might even break the
whole thing alltogether.

In summary: avoid caring too much without specific reason to.

Regards,
--
Aristotle Pagaltzis // <http://plasmasturm.org/>

_______________________________________________
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/



--
Daniel McBrearty
email : danielmcbrearty at gmail.com
www.engoi.com : the multi - language vocab trainer
BTW : 0873928131

_______________________________________________
List: Catalyst@lists.rawmode.org
Listinfo: http://lists.rawmode.org/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.rawmode.org/
Dev site: http://dev.catalyst.perl.org/

Reply via email to