Design patterns 如何为从同一抽象基类继承的不同具体类加载不同的ASP.NET控件
假设您有一个抽象基类Design patterns 如何为从同一抽象基类继承的不同具体类加载不同的ASP.NET控件,design-patterns,oop,Design Patterns,Oop,假设您有一个抽象基类Task,这是一个用户可以完成的任务。有两个具体任务:SimpleTask和ChecklistTask。如果希望(ASP.NET)UI根据任务类型显示不同的控件,该怎么办 在WPF中可以使用数据模板,但在ASP.NET中使用数据模板的好方法是什么?顺便说一下,我们正试图避免使用switch语句。我们还有其他一些带有长switch语句的代码,它们起初很小,但随着时间的推移而增长。这就是我们试图避免的 有这样的设计模式吗?我们不能让任务类“知道”UI类,因为它们是域类。或者swi
Task
,这是一个用户可以完成的任务。有两个具体任务:SimpleTask
和ChecklistTask
。如果希望(ASP.NET)UI根据任务类型显示不同的控件,该怎么办
在WPF中可以使用数据模板,但在ASP.NET中使用数据模板的好方法是什么?顺便说一下,我们正试图避免使用switch语句。我们还有其他一些带有长switch语句的代码,它们起初很小,但随着时间的推移而增长。这就是我们试图避免的
有这样的设计模式吗?我们不能让
任务
类“知道”UI类,因为它们是域类。或者switch语句是我们能做的最好的语句(如果需要,隐藏在单独的“factory”类中)?假设您的SimpleTask在SimpleTask.ascx中实现,而ChecklistTask在ChecklistTask.ascx中实现。然后将其放入.ascx所在的metainfo(以创建特定控件所需的任何方式)路径中(例如:“~/MyControls/SimpleTask.ascx”)
最后:embed control with TemplateControl.LoadControl我喜欢任何设计模式中的“隔离”部分,听着,我认为你应该为简单任务和检查表任务做两个UI实现,它们本身就是一个黑匣子,然后在另一个控件或页面上,如果要列出一些任务,您可以使用
ItemTemplate
,在此ItemTemplate
中,您只需设置一个条件来检查任务的类型,并在其上调用此页面上的一个方法,以呈现正确类型的html(Simple
或Checklist
)某处,必须知道如何将任务子类映射到UI控件。时期唯一的问题是把这些知识放在哪里
这就是我们试图避免的:条件检查。因为如果你有20种任务会发生什么?但这似乎是不可避免的。然后最好将它放在一个单独的类中。任务不能“知道”UI控件,因为它是一个域类。除了将域耦合到UI之外,这甚至是不可能的。UI有一个对域程序集的引用,如果您希望域类提供UI控制,那么您就有循环依赖关系。这是一种可能性。总的来说,有些东西必须知道映射是什么-唯一的问题是,代码属于哪里,以及它是如何工作的?事实上,我可能会从编写一个可以进行映射的类开始,即使没有数据。。。找出如何作为一个单独的步骤和一个单独的类生成映射。是的,谢谢其他的可能性。事实上,需要做一些事情来映射。我只是想知道是否有一个干净的方法来做它,而不是通过一个大的if-else或switch语句。无论如何谢谢你!根据整个应用程序,我会考虑将自定义属性添加到UI控件中,该控件指定了映射到的任务类型。使用反射收集这些数据,填充字典,然后在获得实际任务时进行查找。仍然避免使用switch语句。这会将您的域与UI绑定一点,但更大的问题是,当您将控件移动到其他位置时,应用程序将不再工作。这是我们正在开发的一个相当大的应用程序,所以我相信这不是一个安全的、经得起未来考验的选择。