从父控制器继承或使用问题



我有五个共享通用代码的控制器。最好让它们从父控制器继承,还是使用关注点?例如:

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_actionslayout的控制器继承,或者我可以将公共代码填充到一个关注点中。

一个选择或另一个选择的标准是什么?它被定义了吗?

我的经验法则是:

如果控制器在 URL 中共享相同的命名空间(例如 /projects/.../admin/... ),则我使用来自Projects::BaseControllerAdmin::BaseController的继承。

如果他们只是共享方法或声明而不共享命名空间,那么我使用 mixins。

有时我更喜欢重复的代码。因为就地代码比名称无意义的混合更容易理解。对于涵盖authenticationlayout的关注,您是否有一个好名字?

在大多数情况下,

我使用 mixins 来添加功能,并使用继承来自定义功能。

例如:如果我需要覆盖current_user我会选择继承。如果我只有一些共享方法,那么我会选择 mixins。

最新更新