samedi 20 octobre 2018

Rails controller design pattern idea for decreasing it's size

The question is what do you think about this pattern?

Problem: You've got controller with index action, and this action is huge. Action is full of ActiveRecord chaining and maybe some computations with records. When you are adding new methods controller is getting bigger.

I've heard about "skinny controller fat model", and I'm just what? My models are already fat, are you crazy?

I've heard about service objects, they are not very usable as for me.

result = SomeService.new(params, request, flash, current_user).call

After such service object you could try:

result = SomeService.new(controller).call
# or
result = SomeService.new.(controller)

And what to do with returning error statutes from that service?

Here is the pattern from subject:

# controllers/some_controller.rb
class SomeController < OtherController
  before_actions

  include Index
  include Show
  include Create
  include Update
  include Destroy

  private

  def common_private_method
  end
end

# controllers/some_controller/index.rb
module SomeController::Index
  def index
    # code here
  end

  private

  def index_do_some_stuff
    # this method is prefixed by "index" to avoid name collision
  end
end

Yes, there is some_controller.rb and some_controller directory with actions as files.

Nobody in OOP likes prefixes and if your method has well explaining not short name - prefix is not necessary.

In my opinion, this is the most simple and obvious way. Just take fat code and split to modules! What do you think?

Aucun commentaire:

Enregistrer un commentaire