假设您有一个抽象基类Task
,这是用户可以完成的任务。有两个具体的任务:SimpleTask
和ChecklistTask
。如果您希望(ASP.NET)UI根据它的任务类型显示不同的控件,该怎么办?
在WPF中你可以使用DataTemplates,但在ASP.NET中这样做的好方法是什么?我们试图避免使用switch语句。我们有其他代码片段,其中包含很长的switch语句,但开始很小,但随着时间的推移而增长。这就是我们要避免的。
这样的事情有设计模式吗?我们不能让Task
类'知道'UI类,因为它们是域类。或者是我们能做的最好的开关声明(如果需要隐藏在单独的'工厂'类中)?
答案 0 :(得分:1)
某些地方必须知道如何将Task子类映射到UI控件。期。唯一的问题是在哪里提供这些知识。
答案 1 :(得分:0)
假设您的SimpleTask在SimpleTask.ascx中实现,ChecklistTask在ChecklistTask.ascx中实现。然后将.ascx所在的metainfo(以任何方式你需要它创建特定的控件)路径放入(例如:“〜/ MyControls / SimpleTask.ascx”)。
最后:使用TemplateControl.LoadControl嵌入控件
答案 2 :(得分:0)
我喜欢任何设计模式的“隔离”部分,看起来我认为你应该为简单和清单任务制作两个UI实现,并且两者都只是一个黑盒子本身,然后在另一个控件或页面上你可以使用ItemTemplate
如果你要列出一些任务,在这个ItemTemplate
中,你只需要检查任务的类型,并在其上调用一个方法,在这个页面上呈现正确类型的html( Simple
或Checklist
)