【问题标题】:Is it bad practice to have two controllers for one model in Ruby on Rails?在 Ruby on Rails 中为一个模型设置两个控制器是不好的做法吗?
【发布时间】:2011-06-30 14:23:21
【问题描述】:

我有一个模型,它通过它持有的参数得到不同的处理,例如它就像一个字符表,它也用于非玩家角色,因为它们共享所有相同的属性。所以它会有一个布尔值或整数来指示它是玩家角色还是非玩家角色。非玩家角色会自动生成随机状态参数和名称。

由于两者使用的方法完全不同,我认为为它们设置不同的控制器类是合乎逻辑的,但这会使单个模型具有两个不同的控制器,并且感觉有些奇怪。

这是不好的做法吗?我应该在一个控制器中完成所有编码吗?

【问题讨论】:

    标签: ruby-on-rails design-patterns data-modeling


    【解决方案1】:

    这完全没问题。您所描述的是基于任务的用户界面,与简单的 CRUD 或资源操作相比,您对捕获工作流或流程更感兴趣。请记住,Rails 中的默认设置是非常基本的。随意扩展基础知识。

    【讨论】:

      【解决方案2】:

      在我看来,实际上你应该有两个不同的模型。如果您与对象交互的方式完全不同,正如您所解释的,那么它们真的不应该是同一个类。 Ruby 有一个很好的方法来处理这种情况:模块。您可以使用模块为对象创建共享行为。您甚至可以通过覆盖 ActiveRecord 表名将非玩家角色和角色存储在同一个数据库表中。例如:

      module Character
        def decrease_hitpoints x
          ...
        end
        # other shared functionality can go here
      end
      
      class PlayerCharacter < ActiveRecord::Base
        set_table_name 'characters'
        include Character
      end
      
      class NonPlayerCharacter < ActiveRecord::Base
        set_table_name 'characters'
        include Character
      end
      

      在此示例中,PlayerCharacter 和 NonPlayerCharacter 共享相同的表名和 Character 中定义的功能,但它们是不同的对象。

      最后,为单个模型使用两个或多个控制器完全没问题,就像构建一个完全不依赖模型的控制器一样。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-03
        • 2023-03-07
        • 2012-12-31
        • 2011-11-09
        • 2017-10-18
        相关资源
        最近更新 更多