【问题标题】:Object Oriented Design Patterns for Model Attribute Events模型属性事件的面向对象设计模式
【发布时间】:2012-10-20 01:16:24
【问题描述】:

我试图找出用面向对象设计原则封装以下场景的最佳方法。哪种类型的设计模式最适合?

我在下面添加了非常基本的类定义,基本上一个人有一个计划和一张信用卡。当一个人更改他们的计划时,我们希望向他们收取差额(如果计划的成本更高)并创建一个事件

可以在回调或观察者中执行此操作,检查 PersonPlan 是否已更改,但在具有大量跨模型行为的较大系统中,这变得难以管理且困难使用大量影响状态的不相关回调进行测试。

class Person
   has_one :plan
   has_one :credit_card
   has_many :events
end

class Plan
   attr_accessible :cost
end

class CreditCard
  def charge_card(amount)
    ...
  end
end

class Event
  attr_accessible :message
end

【问题讨论】:

    标签: ruby oop design-patterns object-oriented-analysis


    【解决方案1】:

    如果我理解正确,您的信用卡就是您的条件,您的帐单会根据该条件而有所不同。 Strategy 模式可能很适合,恕我直言。

    Replacing Conditional with Strategy

    【讨论】:

    • 谢谢阿伦!我考虑了一个策略,但我不太关心如果我们要收费,而是如何传递消息。当 Person 发生变化时,CreditCard 和 Event 都需要得到通知,但是这两个通知都不真正适用于 Person 的域。
    • @GregJ 好点。所以,手头有两个问题。您始终可以将 Strategy 用于计算目的,就像您在问题中提到的那样,使用 Observer 来解决发布/订阅问题。
    • 谢谢 Arun,我认为 Observer 可能是要走的路。
    • @GregJ 或者你可以同时使用两者。携手使用模式没有害处。毕竟,你确实有两个问题。
    • 绝对!对不起,我应该说,“我认为观察者可能是要走的路……对于消息传递问题”:)
    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 2019-04-28
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多