Sai*_*fis 7 design-patterns ruby-on-rails data-modeling
我有一个模型,它被它所持有的参数区别对待,例如它就像一个字符表,它也用于非玩家角色,因为它们共享所有相同的属性.所以它会有一个布尔或整数,表示它是一个玩家角色还是一个非玩家角色.并且将使用随机状态参数和名称自动生成非玩家角色.
由于两者使用的方法完全不同,我认为为它们设置不同的控制器类是合乎逻辑的,但这会使单个模型有两个不同的控制器,并且感觉有点奇怪.
这是不好的做法吗?我应该在一个控制器中完成所有编码吗?
它实际上听起来像你应该有两个不同的模型.如果您与对象交互的方式完全不同,正如您所解释的那样,那么它们实际上不应该是同一个类.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
Run Code Online (Sandbox Code Playgroud)
在此示例中,PlayerCharacter和NonPlayerCharacter共享在Character中定义的相同表名和功能,但它们是不同的对象.
最后,对于单个模型使用两个或更多控制器是完全没问题的,就像构建一个完全不依赖于模型的控制器一样好.