像我这样的菜鸟一开始看到DNN时,像刘姥姥进了大观园眼睛都不够用了。找了好久才找到能“下口”的地方。虽然E文很菜,但努力读完 ~\Documentation\Public\DotNetNuke Module Developers Guide 文档后,还是感觉颇有所得。
DNN
的模块结构采用的是三层构架:
l
DAL
:在
DNN
中
DAL
层采用了
Provider
结构。按我自己的理解,就是先定义一个
DataProvider
,里面定义好模块访问数据需要的结构的,采用了单件模式。同时它是一个反射工厂。根据不同情况继承出不同的
ConcreteDataProvider
。同时在
web.config
中定义好默认的
Type
字串。这样通过
Instance
返回默认的
provider
。
l
BLL
:在这层中。一般都有
Controller
和
Info
两部分。
Controller
的作用是完成所有
UI
需要的于数据源相联系的功能,同时完成并提供
Info
给
UI
。
Info
即
CBO
(
Custom Business Object
)。在
DNN
中
Info
的建立是利用核心提供的
CBO
装配集
+IdataReader
利用反射直接完成的。免去了由数据库到
DS
再到苦力般的初始化过程。在我理解中,
dr
和
cache
的利用,都可以极大减少由反射引起的性能损失,而极大提高编程的舒适性和灵活性,通常可以视为很好的解决方式,不知道这种理解对不对。在涉及
Sql
的部分,
DNN
利用了
Microsoft.ApplicationBlocks.Data这个装配集中的内容。一般我的解决方法是利用自己写的一个Sql类,不知道哪种更好。
l
UI
:
主功能页继承自
PortalModuleBase
类。这个类也是从
UserControl
继承而来。我想这个大家都会很了解。一般一个全面一点的模块都会实现菜单,
Edit
,等很多页面。特别会拥有一个
Setting
类来完成页面不同的
Module
的设置。通过不同的
ModuleID
来区别。(这是我的理解,我也不知道是否是这样,希望高手门指正)
DNN
的核心提供了大量的功能。如
logging,scheduler,search
等等,可以通过这些核心提供的接口来实现。按我个人的理解。
UI
层完成的任务就是利用
BLL
层,其它模块,
DNN
核心功能来完成
ascx
的建立。
由于在家里,
DNN
数据库一直配置不好,
msdn
又没装。缺少实践练习的机会。只是通过阅读团队各前辈的
blog
,和
DNN
的文档获得的一些浅显的认识。希望各位大虾如果看了的话,能够指正,免得我深陷泥潭而不觉。
本文转自 duguguiyu 51CTO博客,原文链接:http://blog.51cto.com/duguguiyu/362838,如需转载请自行联系原作者