繁体   English   中英

对返回相似数据的多个对象进行适当的设计

[英]Appropriate design for multiple objects that return similar data

我正在处理以下情况:

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

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

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

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

  • 由于Items非常相似,因此从理论上讲,我可以将所有属性分组到1 Item类中,然后可以通过使用名为GetItems()的方法将整个内容抽象出来,该方法将返回集合。 然后,我可以在选项卡类型上使用委托字典来调用正确的后端方法。

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

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

我相信在您的情况下,我主要会选择选项2。

  1. 创建一个父选项卡类,并使其他选项卡派生自它。
  2. 为所有具有所有共享属性的项目创建一个父类。 每个选项卡的特定项类型可以从父类派生,以定义其额外属性
  3. 在父选项卡中,保留所选项目的列表。 该列表应该是一个列表。 子类可以获取此集合中的项目,并依靠运行时强制转换来获取更多特定类型。 在您的情况下,强制转换基本上不会发生(取决于您的操作方式),因此实际上并没有任何性能问题。
  4. 在父选项卡上,使SendItems方法成为抽象,以便每个子选项卡都必须自己实现

这与上面的第二个选项非常接近,除了利用更多的多态性魔术并避免在SendItems中使用条件-如果您具有这样的条件,只需将逻辑卸载到子类中即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM