【问题标题】:OOP, data binding and user selectionsOOP、数据绑定和用户选择
【发布时间】:2011-06-21 17:14:04
【问题描述】:

基本问题是使用数据绑定有哪些方法可以让用户选择子类来完成这项工作?

具体例子。我有一个接受 CalculationMethod (接口)来进行计算的类。 CalculationMethod 有几种实现。 GUI 开发人员只想使用数据绑定向用户呈现选择。

我采取了一些方法。

最简单的方法是创建一个类,该类为所有实现返回一个(计算方法的)列表,并将名称属性添加到 CalculationMethod 以进行显示。

在此基础上,我有时会创建一个使用反射来做同样事情的类(查找所有实现 CalculationMethod 的类)。这样我就不必记住添加新的实现,但它在 Web 应用程序(它很昂贵)或不允许反射的环境中可能会很糟糕。

有时我会添加一个枚举,每个枚举代表一个实现。有一个工厂方法接受枚举并返回正确的实现。这样,GUI 开发人员可以绑定到枚举。如果必须以某种方式保留用户选择,我经常这样做。

以上各有优缺点。是否有其他和/或更好的方法来做到这一点?

示例如下。 GUI 开发人员会将下拉列表(或其他)绑定到允许用户选择的 CalculationOptions.Calculations。我不会写其他例子,因为你应该明白了。 (我会使用反射来获取所有继承 CalculatoinTemplate 的类,或者我会有一个表示所有继承类的枚举。)

Public Class CalculationTemplate
    Public MustOverride Readonly Property Name() as string
    Public MustOverride Sub Calculate()
End Class

Public Class CalculationImp1
    Public Overrides Sub Calculate()
    End Sub
    Public Overrides Readonly Property Name() as String
        Get 
           Return "Imp1" 
        End Get
    End Property
End Class

Public Class CalculationImp2
    Public Overrides Sub Calculate()
    End Sub
    Public Overrides Readonly Property Name() as String
       Get
           Return "Imp2"
       End Get
    End Property
End Class

Public Class CalculationOptions
   Public Shared Function Calculations() as List(Of CalculationTemplate)
       Dim lst as New List(Of CalculationTemplate)
       lst.add(new CalculationImp1)
       lst.add(new CalculationImp2)
       Return lst
   End Function
End Class

【问题讨论】:

  • 做一个虚拟的例子,以便更容易理解。

标签: .net oop data-binding polymorphism strategy-pattern


【解决方案1】:

在 CalculationOptions 类中添加一个名为 AddCalculationOption() 的新函数,该函数将计算选项添加到列表中。

在 CalculationTemplate 的构造函数中调用 AddCalculationOption 函数,使用当前 Object 并从 name() 返回值作为参数。

所以当一个对象被创建时,它会自动添加到列表中。

您可以使用名称来映射名称和对象。工厂可以使用它来返回适当的对象。

希望我能正确理解您的问题。

【讨论】:

  • 没有。我想你理解了这个问题。我希望我能理解你的建议。您的建议与我示例中的共享方法方式略有不同。问题是我或其他实现新策略(或模板)的开发人员必须记住将其添加到所述类中。我想避免“必须记住”的事情。
猜你喜欢
  • 2023-04-10
  • 2016-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 2016-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多