2012-10-30 121 views
0

我想找出用面向對象的設計原則來封裝以下場景的最佳方法。什麼類型的設計模式最適合?面向對象的模型屬性事件的設計模式

我在下面添加了非常基本的類定義,基本上一個人有一個計劃和一張信用卡。當一個人改變了他們的計劃,我們希望賬單它們的差值(如果計劃的成本爲更多),並創建一個事件

可以這樣做是回調或觀察員,檢查PlanPerson改變,但在具有大量交叉模型行爲的較大系統中,這變得難以管理並且難以用大量影響狀態的不相關回調進行測試。

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 

回答

0

如果我理解正確,那麼您的信用卡就是您的結算所依據的條件。恕我直言,Strategy模式可能是合適的一種。

Replacing Conditional with Strategy

+0

謝謝Arun!我想到了一個策略,但我不太關心*如果*我們的賬單,而不是如何傳遞信息的行爲。當Person變更時,需要通知CreditCard和Event,但這兩個通知都不適用於Person域。 –

+0

@GregJ好點。所以,手中有兩個問題。您可以隨時將策略用於計算目的,並且像您在問題中提到的那樣,使用Observer進行發佈/訂閱問題。 –

+0

謝謝Arun,我覺得Observer可能是要走的路。 –