VB.Net重构删除代码重复

时间:2011-02-01 16:42:58

标签: vb.net refactoring

这是我项目中的类的简化版本。由于Bonus在每个函数中的计算方式完全相同,我想删除此处出现的明显代码重复,并将三个不同的函数合二为一。但是我不确定如何提供这个新函数需要的论据。

例如,我目前只是从代码

传递这样的参数

lblVolumeBonus.Content = TestClass.VolumeBonusAmountStore(红利)。

我认为我必须基本上改变这种逻辑并用类似

的方式调用它

lblVolumeBonus.Content = TestClass.VolumeBonusAmountStore(BonusTrackerBO.StoreBonus)

但我不确定正确的语法或我是否在正确的轨道上。

有人可以帮我找到正确的方向吗?

Public Class TestClass
Public Shared Function StoreBonus(ByVal bonus As BonusTrackerBO.StoreBonus) As Double

    Dim myBonus As Double = bonus.TicketAmount
    Return myBonus * 5

End Function

Public Shared Function DistrictBonus(ByVal bonus As BonusTrackerBO.DistrictBonus) As Double

    Dim myBonus As Double = bonus.TicketAmount
    Return myBonus * 5

End Function

Public Shared Function CompanyBonus(ByVal bonus As BonusTrackerBO.CompanyBonus) As Double

    Dim myBonus As Double = bonus.TicketAmount
    Return myBonus * 5

End Function
End Class

编辑:这可能没有什么区别,但我应该明确表示等式中还有其他因素(我只是想保持简单)。当奖金还有其他回调时,答案也是一样的,例如bonus.MaximumAmount,bonus.MinimumAmount?奖金对象有5个回调,金额根据商店,区域或公司要求而有所不同。

2 个答案:

答案 0 :(得分:2)

为什么不简单

Public Shared Function GiveBonus(ByVal TicketAmount As Double) As Double
    Return TicketAmount  * 5
End Function



lblVolumeBonus.Content = TestClass.VolumeBonusAmountStore(bonus.TicketAmount)

答案 1 :(得分:1)

怎么样:

Public Shared Function GetBonus(ByVal bonus as Double) As Double
    Return bonus * 5
End Function

奖金为bonus.TicketAmount。或者如果它们都从BaseBonusClass等基类继承。

Public Shared Function GetBonus(ByVal bonus as BaseBonusClass) As Double
    Return bonus.TicketAmount * 5
End Function

修改或尝试使用泛型

Public Shared Function GetBonus(Of T As BaseBonusClass)(ByVal bonus as T) As Double
    Return bonus.TicketAmount * 5
End Function