Register  |  
About the author
Baldwin's Status
 Contact Me
Baldwin Sun
Senior Developer for dnn solution & founder of SunBlog module...
Blog搜索
相册库
更多照片请查看相册库
最新评论
Rss Feed
feedsky
抓虾
pageflakes
newsgator
哪吒
我们的服务
  • DotNetNuke 咨询
  • Web设计及其模块开发
  • 免费建站
  • 电子商务
  • 开拓市场
我们致力于开发定制的web 2.0 ,所服务的客户主要包括小中型企业,社区俱乐部及其非盈利机构组织。我们将利用开源的DNN作为我们核心的系统机制,更多相关信息...

解析DNN新生宠儿DAL+

Posted in [解析DNN代码], [DNN模块开发], [优化DNN], [剖析DNN架构] By baldwin

开始先简单交代一下DAL, 所谓DAL, 即是DNN数据访问层(Data Access Layer), 主要负责数据库和业务逻辑的交互, 利用设计模式中的工厂模式来实现数据提供者的分离, 从而可兼容不同数据库.
DNN从4.x版本之后引入一个新生宠儿, 所谓DAL+(Data Access Layer Plus), 顾名思义, DAL+就是对DAL的插件(或补充), 是DAL的一个子集.是一种对数据库访问和交互的替代方式. 当你深入了解DNN核心代码及其机制时, 你会发现DAL+就是对DNN所包含的Microsoft Application Blocks的封装, 你所调用Microsoft Application Blocks可完全用DAL+来操作数据访问.  其操作流程如图:
就如图所展示的,DAL+屏蔽了具体数据访问层,而直接访问抽象数据访问层. DAL+不需具体的数据访问提供者,它主要包含DNN框架默认数据访问的四个方法:
1 ) ExecuteNonQuery: 执行没有返回值的存储过程
2 ) ExecuteReader: 执行返回多个记录值的存储过程
3 ) ExecuteScalar: 执行只有一个返回值的存储过程
4 ) ExecuteSQL: 执行具体的SQL语句
类似下边例子(使用DAL+的ExecuteReader获取数据):
这样你可以直接在Controls Class(业务控制类)中使用DAL+获取数据集,代码如下:
 
  1. Public Function GetArticlesByModule(ByVal ModuleId As IntegerAs List(Of ArticlesInfo)   
  2.      Return CBO.FillCollection(Of ArticlesInfo)(CType(DataProvider.Instance().ExecuteReader("GetArticlesByModule", ModuleId), IDataReader))   
  3. End Function  
DAL+所具有的缺点是不能使用数据提供者这一核心机制, 可能不兼容其他数据库. 但其实DNN平台主要还是使用SQL Sever, 所以对于有些小型应用, DAL和DAL+的区别是无关紧要的. 相反DAL+能让你的代码更为清晰明了,数据访问更为直接, 也节省了好多代码, 比如不再需要DataProvider和SqlDataProvider这两个类, 当然你也不再需要单独建立一个DataProvider项目.
 

Comments

Was it good for you, too?Join the discussion » ,but you need to login first before you make comments.