您的位置:首页 > 其它

机房重构之泛型的使用

2016-04-02 11:21 267 查看
在七层架构中,实体类即数据库的映射,因此实体类中的属性和数据库表中的字段是相对应的。把DataTable中的每一行记录视为一个实体类,把其中的字段读取出来,到实体类的属性中,再把所有的实体类存在泛型集合中。因此,DataTable中有多少个记录,泛型集合中就有多少个实体类,每个实体类的属性和DataTable的字段是相对应的。这样一来,传到B层或U层的将是一个实体类的泛型集合。使用泛型集合传递数据,编写B层的人员无需了解数据库结构符合面向对象思想。

在网上看到的DataTable和泛型转换的关系,借鉴一下:


定义

百度百科上解释是:泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型及其方法的参数类型出现。泛型方法可以将其类型参数用作其返回值的类型或者其某个形参的类型。
我觉得泛型是一次只能放一种类型数据的集合,我们知道集合可以同时放所有的类型,但是在泛型是不可以的。比如我们规定了List<int>,那么在list中只能放int 类型的数据,对于客户端代码,与 ArrayList 相比,使用 List<T> 时添加的唯一语法是声明和实例化中的类型参数。虽然这种方式稍微增加了编码的复杂性,但好处是您可以创建一个比 ArrayList 更安全并且速度更快的列表,对于列表项是值类型的情况尤为如此


使用方法

格式: Dim myList As new  list<T>

包括以下几种形式(假设 C是泛型的类型参数, 是一般类、泛类,或是泛型的类型参数):T 是一个类、T 是一个值类型、T 具有无参数的公有建构方法、T 实现接口 I 、T 是 C ,或继承自 C 。

在敲机房的时候泛型和DataTable的用法是一样的,D层的代码如下:

Dim mylist As New List(Of Model.WorkLog)       '声明泛型类
Dim dt As New DataTable                              '声明一个DataTable表
dt = SQLHelper.ExecDataTable(cmdText, CommandType.Text, paras)        '查询数据给DataTable
mylist = ConvertHelper.ConvertHelper.convertToList(Of Model.Work_Log_Info)(dt)   '把dt转化为泛型
Return mylist            '返回泛型

在这里我们看到从DataTable到泛型还需要一定的转化,这种转化在上篇《对比DataTable和泛型》中已经介绍了,在这里不在赘述。

【总结】

虽然“照猫画虎”参考着师哥、师姐的博客使用泛型已经能查到正确的结果,可总是觉得理解的不是很透彻,现在总结一下,把他们之间的关系理清楚,这样在以后使用的时候才能更加容易,学习是一个反复的过程,每一次的学习都有不一样的体会。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: