-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 21 Oct 2008, at 16:51, Matt Wynne wrote:
Doesn't this just end up shifting the ugly mocking code into the
Presenter specs though?
The stock answer to this question is to move this logic down into
the model layer, so that the interface the Presenter / Controller
uses to work with the database is simpler. This is what people call
'listening to your tests' - if it's hard to mock, it's probably
indicative of a problem in your design.
However, I worry about this 'skinny controller, fat model' advice,
it still doesn't feel like the final answer. To me, ActiveRecord
classes already have too many responsibilities, without making them
also orchestrate calls to other models.
I have been thinking about this a lot lately, and I am starting to
feel like I also need a Service layer between the Controller /
Presenters and the 'Data Access Layer' (Models) to orchestrate the
work.
Personally I dislike the name "Presenter" - and much prefer Service,
Builder or Adapter depending upon what its doing; everyone else seems
to call it a presenter however.
But the point of the "Presenter/Service/Whatever" is precisely so that
neither the controller nor the models have to orchestrate the calls
between associated models. If you think of it that way then I think
it deals with your points above:
* 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
Rahoul Baruah
Web design and development: http://www.3hv.co.uk/
Nottingham Forest: http://www.eighteensixtyfive.co.uk/
Serious Rails Hosting: http://www.brightbox.co.uk/
Lifecast: http://www.madeofstone.net/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.8 (Darwin)
iEYEARECAAYFAkj+NDoACgkQu0BNRvjN8xRIsQCfQMkAVClEQOqPmdF9dPDm8Afq
o1sAnRF5gYkDI1qgfM8G2S+PpdLOUHaz
=fIkf
-----END PGP SIGNATURE-----
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users