On 21 Oct 2008, at 22:13, Stephen Eley wrote:
On Tue, Oct 21, 2008 at 3:57 PM, Rahoul Baruah <[EMAIL PROTECTED]>
wrote:
* the presenter/service's role is to coordinate the models - so its
specs
are purely about mocking the associations and the calls inbetween
them
* the presenter/service isn't a model (not ActiveRecord::Base) - so
it's not
adding extra responsibilities to the models
* it is pretty much a service layer sat between controllers and
models
There seems to be some overload on the word "Presenter" in Railsspeak.
As best I can tell, people are using it to refer to two or more
totally different patterns. Initially I thought presenters were for
encapsulating limited-domain *controller and view logic* in such a way
that they could be embedded in other controllers, thus allowing
composition in views. Things like sidebar widgets, or components of a
dashboard, or a reusable address box, etc. Stuff that benefits from
maintaining its own data so you can't just a partial, but it's still
more about the view than the model.
Right on - that was going to be my response too. Martin Fowler
actually retired the 'Model View Presenter' pattern precisely because
of this confusion.[1]
If we say that a Controller should be responsible for handling HTTP
requests, and co-ordinating the appropriate (persistence /
presentation / etc) work, that seems like enough responsibility.
If we assume that the work to be done against the database or other
sub-systems is non-trivial, then we should not directly call the
persistence layer (= Models in Railsspeak) from the Controller, but
delegate that to another class. It seems like Service is a much more
appropriate name than Presenter here, since this work nothing to do
with presentation. I buy the thing about conductors, and I like the
new-bamboo guys, but I do wonder whether there's some wheel
reinvention going on there.
If we also assume that the data to be presented is non-trivial,
composed of data from multiple database tables, then we need some
object to model the data in this presentation domain. I think this is
where Presenter comes in, although I'm still not sure this is really
an appropriate name. This class can be facade over the various
persistence-layer objects needed for the specific presentation task.
On another project, in another language, in a galaxy far, far, away,
we sprouted a whole layer of POCO presenation 'models' like this, and
it felt like such a relief once we'd broken out this extra layer.
Does this make sense to anyone else?
cheers,
Matt
[1]http://martinfowler.com/eaaDev/ModelViewPresenter.html
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users