如何为从同一抽象基类继承的不同具体类加载不同的ASP.NET控件

时间:2010-02-08 08:10:15

标签: design-patterns oop

假设您有一个抽象基类Task,这是用户可以完成的任务。有两个具体的任务:SimpleTaskChecklistTask。如果您希望(ASP.NET)UI根据它的任务类型显示不同的控件,该怎么办?

在WPF中你可以使用DataTemplates,但在ASP.NET中这样做的好方法是什么?我们试图避免使用switch语句。我们有其他代码片段,其中包含很长的switch语句,但开始很小,但随着时间的推移而增长。这就是我们要避免的。

这样的事情有设计模式吗?我们不能让Task类'知道'UI类,因为它们是域类。或者是我们能做的最好的开关声明(如果需要隐藏在单独的'工厂'类中)?

3 个答案:

答案 0 :(得分:1)

某些地方必须知道如何将Task子类映射到UI控件。期。唯一的问题是在哪里提供这些知识。

  1. 任务本身
  2. 可以使用从Task中检索的数据来查找适当控件的类
  3. 实际给出Task的代码(为什么不能给出UI控件?)
  4. 可能通过属性和反射将Task类映射到UI控件的一些代码。
  5. 其他一些元数据。

答案 1 :(得分:0)

假设您的SimpleTask在SimpleTask.ascx中实现,ChecklistTask在ChecklistTask.ascx中实现。然后将.ascx所在的metainfo(以任何方式你需要它创建特定的控件)路径放入(例如:“〜/ MyControls / SimpleTask.ascx”)。

最后:使用TemplateControl.LoadControl嵌入控件

答案 2 :(得分:0)

我喜欢任何设计模式的“隔离”部分,看起来我认为你应该为简单和清单任务制作两个UI实现,并且两者都只是一个黑盒子本身,然后在另一个控件或页面上你可以使用ItemTemplate如果你要列出一些任务,在这个ItemTemplate中,你只需要检查任务的类型,并在其上调用一个方法,在这个页面上呈现正确类型的html( SimpleChecklist