【问题标题】:Appropriate design for multiple objects that return similar data针对返回相似数据的多个对象的适当设计
【发布时间】:2014-03-01 00:25:09
【问题描述】:

我正在处理以下场景:

  • 一个视图有多个选项卡。每个选项卡由一个单独的类表示 并包含一个数据网格。

  • 每个选项卡都可以返回用户选择的项目集。 这些项目非常相似,但每一个都有一两个额外的 特定于它的属性。

  • View Presenter 有一个名为 SendItems 的方法,它应该获取 当前活动选项卡中的项目并调用适当的后端 服务方法(每个不同的项目集合一个方法)。

这里合适的设计是什么?到目前为止,我想到了两种方法:

  • 由于项目非常相似,理论上我可以将所有项目分组 属性到 1 个 Item 类,然后我可以抽象整个事情 通过一个名为 GetItems() 的方法来输出,该方法将返回 收藏。然后我可以在选项卡类型上使用委托字典 调用正确的后端方法。

  • 我可以让所有选项卡派生自一个基本选项卡,存储列表 Presenter 中的选项卡并按住当前选项卡。在 SendItems 上,使 几个条件(每种类型一个(如果 CurrentTab is TabA => MethodA(), 等等..)),然后向下转换以检索正确的数据。最后,调用 适当的后端方法。

我发现这两种解决方案都不吸引人(将单独的属性分组到一个类/向下转换),并希望有一种解决此类问题的标准方法。

【问题讨论】:

    标签: c#


    【解决方案1】:

    我相信你的情况,我主要会选择选项 2。

    1. 创建一个父选项卡类并让您的其他选项卡派生自它。
    2. 为您的所有项目创建一个父类,其中包含所有共享属性。每个选项卡的特定项目类型可以从父类派生以定义它们的额外属性
    3. 在父选项卡中,保留所选项目的列表。该列表应该是一个列表。子类可以获取此集合中的项目,并依靠运行时强制转换来获取更具体的类型。在您的情况下,演员阵容基本上是一个 noop(取决于您如何做),因此实际上没有任何性能问题。
    4. 在父选项卡上,将 SendItems 方法抽象化,这样每个子选项卡都必须自己实现它

    这与您上面的第二个选项很接近,除了利用更多的多态魔法并避免您在 SendItems 中的条件 - 如果您有类似的条件,只需将逻辑卸载到子类。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 2011-01-24
      • 1970-01-01
      相关资源
      最近更新 更多