Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 针对返回相似数据的多个对象的适当设计_C# - Fatal编程技术网

C# 针对返回相似数据的多个对象的适当设计

C# 针对返回相似数据的多个对象的适当设计,c#,C#,我正在处理以下场景: 视图有几个选项卡。每个选项卡由一个单独的类表示 并包含一个数据网格 每个选项卡都可以返回用户选择的项目集。 这些项目非常相似,但每一个都有一个或两个附加项目 特定于它的属性 视图演示者有一个名为SendItems的方法,该方法应获取 从当前活动选项卡中删除项目,并调用相应的后端 服务方法(每个不同的项目集合一种方法) 这里合适的设计是什么?到目前为止,我想到了两种方法: 由于项目非常相似,理论上我可以将所有项目分组 属性转换为1个Item类,然后我可以抽象整个内容 通

我正在处理以下场景:

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

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

  • 视图演示者有一个名为SendItems的方法,该方法应获取 从当前活动选项卡中删除项目,并调用相应的后端 服务方法(每个不同的项目集合一种方法)

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

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

  • 我可以让所有选项卡都从基本选项卡派生,存储 选项卡,并按住当前选项卡。在SendItems上,使 多个条件(每种类型一个条件(如果CurrentTab
    TabA=>MethodA(), 然后向下转换以检索正确的数据。最后,打电话 适当的后端方法


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

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

  • 创建父选项卡类并使其他选项卡从中派生
  • 为包含所有共享属性的所有项目创建父类。每个选项卡的特定项类型可以从父类派生来定义其额外属性
  • 在“父项”选项卡中,保留所选项目的列表。列表应该是一个列表。子类可以获取此集合中的项,并依赖运行时强制转换来获取更具体的类型。在您的情况下,演员阵容基本上是一个noop(取决于您如何做),因此实际上没有任何性能问题
  • 在父选项卡上,将SendItems方法抽象,以便每个子选项卡都必须自己实现它
  • 这接近于上面的第二个选项,除了利用更多的多态性魔法和避免SendItems中的条件之外——如果您有这样的条件,只需将逻辑卸载到子类即可