张文波(半空) 博客

交流

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

/*仅代表个人的理解*/

Function GetPropertyInfo(ByVal objType As Type) As ArrayList
获得objType的各个属性名称,并将属性名称作为字符串,存放到ArrayList结构中,返回ArrayList结构。(通过objType.GetProperties()获得属性的名称)

Function GetOrdinals(ByVal objProperties As ArrayList, ByVal dr As IDataReader) As Integer()
利用GetPropertyInfo()函数获得的属性名称,利用该名称查找IDataReader对应字段的索引值。并将索引值按objProperties的顺序存放到integer数组中。找不到的置-1,在CreateObject()函数中将根据该值拷贝数据。(主要通过dr.GetOrdinal(CType(objProperties(intProperty), PropertyInfo).Name)实现)

CreateObject()
将IDataReader中的一条记录的数据存放到objType类型对应的属性值中。对应关系通过上面的两个函数建立。

FillObject() AS Object
只读取IDataReader中的第一条记录,并存放到objType中进行返回

Function FillCollection(ByVal dr As IDataReader, ByVal objType As Type) As ArrayList
获取IDataReader中的所有记录,每一条记录存放一个objType,并将所有的objType存放到ArrayList中。ArrayList为一维数组,每一个元素存放一个objType。

当只获取一条记录时,可以考虑使用FillObject(),如果是获取记录集,则使用FillCollection()。

CBO在整个数据库数据获取过程中的位置:
      Links.ascx...............呈现在查看页面的UI控件,界面层,显示从数据库获取的数据。调用LinksController.vb中的函数获取数据库数据。

      LinksInfo.vb.............该模块的自定义业务逻辑对象CBO(以“模块名称+Info”命名)。定义从数据库获取的字段名称一致的属性。仅进行属性定义,属性名称与从数据库中返回的字段名称必须一致,但不用匹配。

      LinksController.vb.......该模块的业务逻辑访问对象(以“模块名称+Controller”命名)。获取数据库返回数据时,借助CBO和DataProvider.vb,对数据集进行转化。比如将数据库返回的数据集,通过CBO,转化成LinksInfo对象存放或ArrayList结构。

      DataProvider.vb.......... 数据访问工厂抽象类。提供给LinksController.vb调用。屏蔽数据                                           库具体的实现。

      SqlDataProvider.vb.数据访问的具体实现 。通过调用存储过程进行数据库操作。

从数据库获取的数据集的字段名称,在LinksInfo.vb中的属性定义中必须存在。换句话说,IDataReader中的字段名称和objType中的属性名称必须一样,但个数不需要匹配。

参考:
[DNN模块开发]模块的文件结构及命名方法 (二十四画生)
http://esshs.cnblogs.com/archive/2005/07/21/197198.html
[DNN学习所得]CBO——简化从数据库读取数据并实例化对象的有效方法(二十四画生)
http://esshs.cnblogs.com/archive/2005/06/20/177542.html

http://andrewma.cnblogs.com/archive/2005/08/09/210565.aspx
DNN学习笔记-代码学习:CBO (天志)
http://admin11.cnblogs.com/archive/2005/07/15/193298.aspx

 

posted on 2006-03-18 11:52  半空  阅读(904)  评论(0编辑  收藏  举报