2009-11-11 71 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()。所有这些方法都会返回同一类的新实例,并使用不同的值进行初始化。