是否有同时设置多个对象属性的行业标准?

时间:2017-01-17 16:54:02

标签: ruby-on-rails ruby oop

在我的rails模型中,我有时会覆盖一个属性设置器,因此它会设置多个属性,如下所示:

class UserSubscription < ActiveRecord::Base

  # multi setter!
  def subscription_plan=(sp)
    self.duration                      = sp.duration
    self.num_lessons                   = sp.num_lessons
    self.checkout_active_duration_days = sp.checkout_active_duration_days
    self.num_collaborators_can_have    = sp.num_collaborators
    super sp
  end

  # multi setter!
  def stripe_subscription=(ss)
    self.stripe_subscription_id  = ss.id
    self.current_period_start    = UserSubscription.stripe_stamp_to_datetime(ss.current_period_start)
    self.current_period_end      = UserSubscription.stripe_stamp_to_datetime(ss.current_period_end)
  end

end

虽然最初我认为这有点聪明,但随着时间的推移(多年),我觉得缺乏透明度会让我感觉不舒服。

所以我玩弄了没有&#34;覆盖/超载&#34;但专门调用这些方法#set_attrs_by_subscription_plan,或类似的东西。相比之下,这感觉更笨重,有点麻烦,但烟雾和镜子都少了。

在我看来,这必须是其他人处理过的事情,甚至可能是有名字的东西。甚至可能有一个行业标准来实现这一点,或设计模式。

有没有人对我有建议/推荐?

1 个答案:

答案 0 :(得分:1)

您可以使用currupt.py random_file.wav