2009-11-11 68 views
0

我有80-90個類都是一種計算類型。但是每個班級使用一種方法 計算,這在每個班級中都是相同的。每個類中不同的項目是 是計算方法中使用的實例變量。尋找設計模式

我要尋找一個模式的原因是因爲我在做什麼,似乎非常repetitive.Below僅僅是一個計算的一個例子,但可以有多達200次計算。

Protected Overrides Sub Compute(ByVal cache As Cache.ClientCache(Of System.Guid), _ 
           ByRef objIsTickBoxATicked As IClientAnswer(Of System.Guid)) 
    Dim objClientAdviceParas As ClientAdviceParagraphs 

    'Get the Client Advice Paragraphs 
    objClientAdviceParas = GetTickBoxesFromCache(GetAnonymousCache(cache), _ 
                CType(cache.Client, Client)) 
    'Return the value 
    objIsTickBoxATicked.BoolValue = _ 
       CheckTickBox(objClientAdviceParas, m_csClientAdviceParaWelfareBenefitsReferral) 

End Sub 
+0

這會幫助人們找到你的問題,如果你讓標題更具體。 – ctford 2009-11-11 13:40:12

+0

要回答這個問題,我們確實需要更多地瞭解計算之間的差異。你可以更多地描述一下,或者至少增加一個計算來說明這些變化是如何變化的? – 2009-11-11 13:52:39

+0

究竟是什麼重複?即什麼是實際問題? – 2009-11-11 14:06:19

回答

0

也許問題是問題的「語言」和編程語言的錯位。也就是說,您聽起來像是在使用面向對象的方法來解決功能性問題。

使用功能語言。

+0

我已經看過模板方法模式,但它仍然意味着我有70-80個不同的類。只用一種方法。功能編程語言是我前一段時間考慮的內容,甚至創建了一個DSL,因此提供計算的分析人員可以自己編寫計算。 我對功能語言有足夠的瞭解,以實現它可以做的,我想要的。實施它將是另一個問題,謝謝你送我正確的方向。 – Miker169 2009-11-16 14:34:17

4

您是否考慮過爲您的80-90課程創建單個超類?你可以把這個共同的邏輯放在超類中。

2

我有點困惑。你說,計算的方法在每個類中都是相同的,但它使用不同的實例變量。這是否意味着該方法始終具有相同的簽名,但實現有所不同?在這種情況下,你所能做的只是將方法和通用成員變量分解成一個超類,但是你仍然需要爲每個計算編寫一個計算方法的實現。這並不能爲您節省很多工作,但它使您能夠以多態方式使用計算。一般來說,如果每次計算都不相同(即使只是一點點),您也必須獨立實施。如果所有計算都有一個共同的模式,模板方法模式會有所幫助,例如:

1. fetch values 
2. apply transform 
3. sort result 

或類似的東西。

1

你描述,只有「實例變量」在你的80-90班不同,我建議讓他們有且只有一個類。實例的責任是攜帶不同的實例變量值,而不是類。

如果創建一個實例的代碼是複雜的,可以再創建一個工廠類,具有用於每種情況下一個單獨的工廠方法:的createXXX()。所有這些方法都會返回同一類的新實例,並使用不同的值進行初始化。