具有不同逻辑的类别的模型设计应该是什么?

时间:2012-07-24 12:26:07

标签: ruby-on-rails ruby ruby-on-rails-3 oop inheritance

我计划为不同的类别提供不同的逻辑,我不知道是否应该制作20个不同的模型,或者我是否只能拥有一个StoreCategory模型并将逻辑放在那里。有些逻辑很小而有些逻辑很大。

所以如果我有不同的商店类别,如折扣,在线,交付,零售等,并希望给他们自己的特殊逻辑,我该怎么办?

1 个答案:

答案 0 :(得分:2)

这是一个很好的问题。在你的位置,我会创建一个类“类别”,我的其他类继承自第一个。在Category类中,我将共享代码和特定代码放在子类中。如果有必要,您可以使用多态关联。这只是一个想法。

编辑1:添加代码示例

class StoreCategory < ActiveRecord::Base

  before_save :something_private

  def a_public_function
    #...
  end

  protected 
    def a_protected_function
      #...
    end

  private
    def something_private
      #something after save
    end
end

class DiscountCategory < StoreCategory
  def my_first_function
    #I could use a_public_function and a_protected_function
  end
end

class OnlineCategory < StoreCategory
  def a_protected_function
    #I could use a_public_function
    #I could override a_protected_function
    #I could use super to run the Category's function
  end
end

在保存每个子类之后调用函数something_private。我认为这是明确的,有组织的。它的工作方式与ApplicationController类相似。