English 中文(简体)
地位模式设计模式
原标题:Status model design pattern
  • 时间:2009-08-25 09:33:40
  •  标签:

我陷入了模式实施状况的问题。 这可能是因为设计错误。

有一种地位模式。 模式有多个例子,只有少数预先界定的地位(如:创造、更新、检索等)。 每种情况都有某种计算逻辑。 E.g. model.cost(>)对每一状况作了不同计算。

我愿自动确定正确的<代码>model_status_id。 在保留模型时。 我认为,在理想情况下,我可以这样做:

model.status = StatusModel.retrieved

以及

case status
  when renewed
    # ...
  when retrieved
    # ..
end

想一想在数据库中拯救模型浏览中的地位,现在就是:

ModelStatus < ActiveRecord::Base
  has_many :models
Model < ActiveRecord::Base
  belongs_to :model_status

然而,这给我带来了法典中的许多问题。 是否有任何人对此有好的想法或模式?

最佳回答

为什么不保持实际模式的地位部分? 如果它们被预先界定,那就不太多了工作:

class Model < ActiveRecord::Base

  STAT_CREATED   = 1 
  STAT_RENEWED   = 2
  STAT_RETRIEVED = 4

  validates_inclusion_of :status,
                         :in => [1, 2, 4]


  def created?
    status & STAT_CREATED
  end

  def renewed?
    status & STAT_RENEWED
  end

  def retrieved?
    status & STAT_RETRIEVED
  end

end

这样,你就可以直接测试模型(如@model.created?)或撰写你的案例陈述,如:

case @model.status
when Model::STAT_CREATED
...
when Model::STAT_RENEWED
...
问题回答




相关问题
热门标签