代码改变世界

DotNetNuke(DNN)从入门到进阶(1)-怎样写自己的模块

2004-11-18 10:35  灵感之源  阅读(...)  评论(... 编辑 收藏
好久没有写DNN的技术文章了,这是DotNetNuke(DNN)从入门到进阶之怎样写自己的模块(Modules)。关于DNN的相关说明,可以参看我的DNN系列随笔。

从一个熟练的DNN开发者来说,写一个DNN模块没有任何难度,对一个新手来说,只需要依样画葫芦便可。在DNN2.x中,有不少内置的模块,大家只需要参考着做就可以了,需要注意的地方只有几个:

1、DNN是基于模块的,这意味着你开发的模块都必须使用Web Control(.ascx)并继承PortalModuleControl(DNN3.0更名为PortalModuleBase),这样你便可以直接得最常用的PortalID、ModuleID和PortalSettings等公用属性;

2、DNN是基于N-Tier的,分UI、BLL、DAL、DSL等四层,UI就是具体的Web Controls(*.ascx),BLL就是业务逻辑,DAL就是基于Provider模式的数据存取,DSL就是数据存储,根据实际情况可能是ACCESS、MS SQL、Oracle、MySQL等;

3、与其它多层引用不一样,DNN采用子引用父亲,也就是具体的功能模块引用DNN,而不是DNN引用具体的功能模块,这样的好处是:不管多少模块,内核仍然保持干净;坏处是:如果打包,会莫名其妙地很膨大,因为内心的所有程序集文件都编译到具体模块的bin目录下面了。

4、DNN推荐模块目录结构是:
      Module Root
  |--Components
      |--Controls
      |--功能A(包括UI和BLL,BLL中包括业务逻辑属性和数据存储实例类)
      |--功能B
      |--功能X
      |--Providers\DataProvider\SqlDataProvider

    其中Providers\DataProvider存放数据存取基类,Providers\DataProvider\SqlDataProvider存放MS SQL的数据存取继承类,而这个类是独立工程。

5、特别需要注意的是ModuleID,这是每个实例化模块的唯一标示,而通过ModuleID则可以获取TabID(我喜欢称之为栏目ID,而不是标签ID,感觉标签忒别扭)。

    说了这么多,最容易的就是用现成的工具:DNNTemplate,安装之后就在VS.NET中添加了DNN Module、DNN SQLDataProvider DAL、DNN ACCESSDataProvider DAL、DNN SkinObject等4个项目模块,然后大家填写业务代码便可,实在方便,如图1。


                                                                  (图1)

    以下是我过去3个多月苦干的基于DNN开发EIP(企业信息门户)的核心系统CMS(内容管理系统)VS.NET解决方案,如图2:

                             (图2)

请到这里下载:DNNTemplate,这个工具支持VS.NET 2002/2003

下一章将深入介绍“我的模块”的具体实现。