Spiga

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

2004-11-18 10:35 by 灵感之源, 4919 visits, 收藏, 编辑
好久没有写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

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

21 条回复

  1. #1楼 boy1192004-11-17 22:57
    不错
     回复 引用   
  2. #2楼 Findekano      2004-11-17 23:03
    学习一下:)
     回复 引用 查看   
  3. #3楼 做人要厚道2004-11-17 23:03
    好东西
     回复 引用   
  4. #4楼 dudu      2004-11-17 23:03
    不错, 这样写自己的模块就方便多了。
     回复 引用 查看   
  5. #5楼 lion      2004-11-17 23:04
    good
    建议灵感有空的时候多写些相关的文章
     回复 引用 查看   
  6. #6楼 寒枫天伤2004-11-17 23:09
    顶........

    呵呵,当这里是论坛了
     回复 引用   
  7. #7楼 jason[未注册用户]2004-11-18 08:40
    好东西,谢谢分享
     回复 引用   
  8. #8楼 scocsdn2004-11-18 09:26
    非常好!对于刚接触DNN的我来说很有帮助
    期待下一篇
     回复 引用   
  9. #9楼 我的未来不是梦2004-11-18 09:29
    只能装在2003上吗?
    我装在2002上不好用啊
     回复 引用   
  10. #10楼[楼主] Unruled Boy(灵感之源)      2004-11-18 10:42
    to:我的未来不是梦

    这个工具支持VS.NET 2002/2003
     回复 引用 查看   
  11. #11楼 wayfarer      2004-11-18 10:57
    先下来看看,DNN对于我来说是新东西,还需要学习.
     回复 引用 查看   
  12. #12楼 young2004-11-18 11:35
    我在新建的Module裡面無法使用DotNetNuke Namespace,這個dll應該在哪裡引用?
     回复 引用   
  13. #13楼[楼主] Unruled Boy(灵感之源)      2004-11-18 12:21
    先下载dnn并安装之,引用。
     回复 引用 查看   
  14. #14楼 shixiang9076[未注册用户]2004-11-19 10:21
    能发个DNN 得项目及其源码?这里我先谢了!
     回复 引用   
  15. #15楼 shixiang9076[未注册用户]2004-11-19 10:22
    shixiang9076@sina.com
     回复 引用   
  16. #16楼 Dragoon      2004-11-22 00:32
    非常感谢您,我是从您的文章开始接触DNN的,我在DNN官方网站已经注册了,我没有发现有模板可以下载,只能下载源代码,请问您的模板是怎么弄到的?!
     回复 引用 查看   
  17. #17楼 flexmis2005-03-16 10:27
    最新DNN代码生成模板下载
    http://dnnjungle.vmasanas.net
     回复 引用   
  18. #18楼 xhy8182005-03-26 14:17
    请问进阶(2)(3)....那里有呀?
    下一章将深入介绍“我的模块”的具体实现。 在那里?
     回复 引用   
  19. #19楼 活靶子[未注册用户]2005-06-25 13:52
    希望能够尽快看到进阶(2)(3)....
    期待!!
     回复 引用   
  20. #20楼 zhiyue[未注册用户]2005-07-26 15:28
    希望能够尽快看到进阶(2)(3)....
     回复 引用   
  21. #21楼 zhiyue[未注册用户]2005-07-26 15:36
    利用DNNTemplate开发新模块时,打开 .acxp窗体时总是出现如下错误:在Web窗体设计器中未能加载该文件。文件中的类都不能进行设计,因此未能为该文件显示设计器。哪位高人能解决这个问题,非常感谢
     回复 引用