我有五个共享通用代码的控制器。最好让它们从父控制器继承,还是使用关注点?例如:
class PostsController < ApplicationController
before_action :authenticate, :set_project
layout 'projects'
end
class CommentsController < ApplicationController
before_action :authenticate, :set_project
layout 'projects'
end
# three other controllers, etc...
我可以让控制器从一个声明before_actions
和layout
的控制器继承,或者我可以将公共代码填充到一个关注点中。
一个选择或另一个选择的标准是什么?它被定义了吗?
我的经验法则是:
如果控制器在 URL 中共享相同的命名空间(例如 /projects/...
或 /admin/...
),则我使用来自Projects::BaseController
或Admin::BaseController
的继承。
如果他们只是共享方法或声明而不共享命名空间,那么我使用 mixins。
有时我更喜欢重复的代码。因为就地代码比名称无意义的混合更容易理解。对于涵盖authentication
和layout
的关注,您是否有一个好名字?
我使用 mixins 来添加功能,并使用继承来自定义功能。
例如:如果我需要覆盖current_user
我会选择继承。如果我只有一些共享方法,那么我会选择 mixins。