最近在要在网站中做个调查表的用户控件,也就是一些单选题的集合,然后用户可以投票。
最开始为了方便,直接就在数据库将其选项默认最多为4个,下面是对应的实体层的代码(只是简单的与数据库对应)。
然后在UI层根据判断每个字段是否为空,非空则加入RadioButtonList列表。
在提交按钮的点击事情也要进行类似判断,根据RadioButtonList的选择更新数据库。
这样做的话,可以完成功能,但是页面中耦合性太大。假使现在想把选项增加到6个,那么就要从数据库开始修改,最后要修改到UI层,在UI层中添加
这样的语句。这样三层就没有多大意义了。我们应该想想办法降低她们的耦合性。
首先,我们可以在数据库Survey表中添加多个字段[ItemCount],来表示选择项的总数,而且在UI层中可以根据这个字段自动的读取相应的[Item]和[Count]字段。我们发现,选择项的字段设置是有规律的:Item1,Item2,Item3,Item4,投票人数字段也是,所以很快的我们想到可以用反射来完成。
下面是修改过的RadioButtonList数据绑定函数,主要用了反射读取属性
接着在Button1_Click事件中用反射设置属性
到此,我们就利用反射写了一段UI层的代码,而且跟数据层和逻辑层耦合性不算高。以后修改数据库个数据层等就不需要修改UI层了,达到了分层的目的。
我也是刚刚开始学习反射,很开心有这样一个我觉得不错的例子用上了。当然,这个例子应该有更好的方法,欢迎大家交流。
文中用到了李天平老师的类库,大家可以上他BLOG看看,写的很好,很实用。
http://www.cnblogs.com/ltp/archive/2008/03/01/1087455.html
最后推荐子阳兄的BLOG,这里几篇关于反射的文章写的好好,收益匪浅。
http://www.cnblogs.com/JimmyZhang/category/107410.html