在C#,Windows窗体应用程序中,我们有一系列与数据库中的菜单条目记录相关联的用户控件...
ID Menu Title
1 User Management
4 Group Management
6 System Utilities
12 Configuration Management
一些用户控件......
我们目前只是打开ID,但这似乎是一种非常原始的方法来实现这一点并且有很多硬编码ID,我不喜欢。
读取数据库条目并加载适当的用户控件最合适的方法是什么?
谢谢!
答案 0 :(得分:2)
在某些方面,交换机(可能是枚举而不仅仅是id)非常合理。您可以将程序集限定名称推送到数据库中,但DB关心程序集或类的内容是什么?当你重构时会发生什么?转移到java?需要支持多个UI引擎吗?不,我可能只是改变自己 - 用工厂方法封装它......
public static Control CreateControl(ControlType controlType) {
switch(controlType) {
case ControlType.Foo:
return new blah...
case ControlType.Bar:
...
}
throw new ArgumentOutOfRangeException();
}
答案 1 :(得分:1)
您可以将类名存储在数据库中,并通过反射实例化它们。他们需要全部实现一个接口,或者所有都来自一个基类(我假设你正在做,扩展Control),以便处理,而不必以不同的方式处理每个单独的类。
答案 2 :(得分:0)
您可以将类型名称存储在数据库中,并使用反射来新建用户控件。