
Out Of Controller - yusukeito
http://blog.8thlight.com/paul-pagel/2011/10/17/out-of-controller.html
======
rhizome
It's almost a truism that every time someone talks about Rails and issues with
"convention over configuration," it means they're going to be substituting CS
concepts (usually filtered through Java) for well-engineered Rails techniques
and creating code smell.

To the presenterFactory, let's go!

------
tptacek
"StoryAssigner"? Really?

~~~
dan_manges
I like using service classes for things like this.

    
    
      class StoryService
        def self.assign_story(params)
          story = Story.find(params[:story_id])
          user = User.find(params[:user_id])
          story.assign_to(user)
        end
      end
    

This example is fairly minimal, but with service classes handling workflow and
object coordination instead of the controller, the code is easier to test and
reuse.

~~~
rhizome
See, this strikes me as CS-driven code smell. Why not use an association
between User and Story (maybe through :assignments) and just
`user.stories.create(...)` or `user.assignments.create(:story => story)` ? No
spurious class necessary.

~~~
dan_manges
That is probably how you would do it in this case, but in more complex
scenarios, a simple association wouldn't be sufficient. In those cases,
putting the code into a service instead of the controller will make the code
easier to test and reuse.

~~~
rhizome
What's an example that exceeds the functionality of associations?

------
nevinera
Rails is not actually MVC. The MVC system is _asynchronous_ , as you can tell
with a quick look at the wikipedia page linked there - it was intended for
desktop applications (though there are a few js frameworks out there that do a
good job of it also).

Rails is closest to a Model 2 system: <http://en.wikipedia.org/wiki/Model_2>

------
dsandrowitz
"Out of Controller"...that is our nickname for our current Comptroller. When
he drinks...holy shit is it a good time.

