Spiga

DNN(DotNetNuke)研究手札系列2-背景、现状

2004-09-01 20:17 by 灵感之源, 6184 visits, 收藏, 编辑
首先,请不要忙着看这篇文章,尝试去官方网站下载一个最新版本的来安装看看,仔细看看安装说明文档、各种技术的白皮书,DNN做得很全很仔细,连版本代码差异都精细到每行代码。

为什么不去仔细研究呢?


DNN到底是啥来头?DNN可以追溯到ASP.NET Starter Kits的ASP.NET Portal,这个东西仍然可以在asp.net网站中找到。相关的文章我之前也写过,请自行搜索。ASP.NET Portal之后,出现了IBuySpy,也就是大家熟悉的IBS,这个比ASP.NET Portal进化了不少,使用了大量的.NET技术,也就是DNN的雏形。2002年,IBS給市场印证了其局限性不能满足用户需求,DNN1.x推出了,它在IBS的基础上主要改善了模块功能,接下来的DNN2.0.x更是把整个内核重写,带来了革命性的Skin。


DNN在外国到底有么受欢迎?
1、DotNetNuke:http://www.dotnetnuke.com/官方站点每天的注册/访问量,大家可以看看其首页右边的在线统计;
2、DNN论坛http://www.asp.net/Forums/ShowForum.aspx?tabindex=1&ForumID=90是比较热的,相对ASP.NET网站上的其它论坛来说;
3、DNN在众多免费/收费Portal中应用甚广;
4、DNN2.0.x发布的时候,在微软VS-Live! Conference中演示过,呵呵;

在研究的2个多月中,我感觉,与其等待别人来喂自己,到不如自己去觅食,或许这样比喻不贴切,意思就是说,动手去研究,比等待别人来教自己来得实际。

DNN倡导的是一种准备就绪、动态的、100%互动的数据驱动网络门户框架。

DNN最大的特点是系统框架、DSL(数据存储层)、DAL(数据访问层)、BLL(业务逻辑层)、PL(呈现层)完全分离。系统开发人员、业务开发人员、美工和DBA(数据库管理员)都是“互不相干”的。

为了和.NET 2005尽量兼容,DNN应用了大量的所谓Provider(提供者)/Factory(工厂)模式来实现了其广泛的扩展性,可能你会觉得要仅仅实现一个数据的更新,要在3个类中实现,但当你要在MS SQL、ACCESS、MySQL、Oracle或XML之间自由切换,那么,你将会发现DNN这种模式是会令你愉快的。

DNN的另外一个特性是其Skin(外观),它实现了从Portal(门户)、Tab(栏目)到Module(模块)各个层次的动态外观,每个Skin分Skin和Container(容器),Container可以理解成DNN的模块区域,每个模块都包括在一个Container中。DNN的Skin和动态Module是密不可分的。DNN的Tab和Module定义已经到达了WYSIWYG这个层次了,不过我认为它不能做到集中处理。

DNN的每个Module都可以理解成一个积木,你可以随时把这个积木放到任何栏目的任何位置,你甚至可以隐藏它。不过DNN对每个Module的数据处理都没有做到集中,Module删除了,并不对自动删除对应的数据,时间一长就产生大量冗余数据。而且没有集中处理,非常不直观。

以上缺陷我都在实际应用中改善了。

如果你仅仅认为DNN的Skin仅仅是改变一下CSS和换一下图片,如果认为.Text可以和DNN比较,那么,你都错了。随着深入DNN的内核,绝对让你改观。

DNN接下来将会在10月份推出2.2x,改进包括:
1、门户搜索;
2、友好URL,路径不再显示/default.aspx?tabid=xx,而可能是/portal/0/tab/11/page/;
3、多语言;


在章3中,我会肢解DNN,按功能給大家介绍其框架。
Add your comment

26 条回复

  1. #1楼 RaY2004-09-01 20:32
    不过DNN对每个Module的数据处理都没有做到集中,Module删除了,并不对自动删除对应的数据,时间一长就产生大量冗余数据。而且没有集中处理,非常不直观。

    ---可以的
    所有和modules表中moduleID相关的表,都有cascade delete related records属性。
     回复 引用   
  2. #2楼 unruledboy(灵感之源)2004-09-01 20:35
    我再研究一下,以免我的不仔细误人子弟;)
     回复 引用   
  3. #3楼 中国Rainbow2004-09-02 01:31
    灵感 :
    我买了.net空间 买了sql数据(给我的教育研究课题组服务的) 原本是想装rainbow的,但是好像是因为服务商(商务中国)暂停url隐含转发服务,导致我的rainbow只能显示首页,然后测试sql的dnn总是报错!郁闷!
    我现在出错的网址: http://www.t910.net
    如果有时间 帮我看看!先谢了!
     回复 引用   
  4. #4楼 中国Rainbow2004-09-02 08:22
    2、友好URL,路径不再显示/default.aspx?tabid=xx,而可能是/portal/0/tab/11/page/

    -----
    如果是这样他将会和Rainbow具有非常类似的功能,估计我那个空间也不能用 哎

    顺便说说rainbow用的是增加portale,语言目录(前两项都)可选别名增加tab方法构建url的
     回复 引用   
  5. #5楼 灵感之源2004-09-02 08:54
    你的数据库还没有初始化,估计是没有正确安装好。
     回复 引用   
  6. #6楼 boy1192004-09-02 10:52
    写的太好了,dnn的大体结构已经阐述的很清楚了。
    有两个问题:
    1、下一版的门户搜索是一个什么样的功能?
    2、dnn的搜索功能是否类似于aspnetforum不是直接搜索目的表的,而是在search表中搜索记录?那么这样的话就不适合中文了。
     回复 引用   
  7. #7楼 boy1192004-09-02 11:07
    下一版要等到10月份才出,然后各种第三方的插件也不知道什么时候才能更新,还要等阿
     回复 引用   
  8. #8楼 灵感之源2004-09-02 11:23
    关于门户搜索,你可以访问这里:http://www.dotnetnuke.com/Default.aspx?tabid=619

    第三方组件不需要更新,因为改变不大,会兼容。
     回复 引用   
  9. #9楼 小春2004-09-02 11:28
    支持,
    以前一个人研究DNN很累,许多地方都是半懂不懂的,希望看了你的系列文章后再对DNN进行研究能有更大收获:)
     回复 引用   
  10. #10楼 boy1192004-09-02 11:35
    每一个End Function下面都有一条很长的水平线,不知道它是如何加入的,请指点一下,谢谢
     回复 引用   
  11. #11楼 灵感之源2004-09-02 12:56
    to:boy119
    啥意思?不是End Function,是模块标题吧?
     回复 引用   
  12. #12楼 boy1192004-09-02 14:27
    比如你打开default.aspx.vb第20行和21行之间有一条白色的水平线,也删不掉,回车也不动,好像固定在两行中间一样。这个东西好像是为了分割同一页面两块代码之间的。
     回复 引用   
  13. #13楼 灵感之源2004-09-02 15:12
    晕,这是vs.net自己弄的代码区域分割线吖!我想绝大部分语言IDE都会有这个的吧?如果不想要,可以在选项配置中去掉。
     回复 引用   
  14. #14楼 boy1192004-09-02 15:32
    看到了,我说怎么以前写c#没有见过呢,原来是vb专用的。
     回复 引用   
  15. #15楼 灵感之源2004-09-02 16:40
    c#应该也有的哦,可以设置的。
     回复 引用   
  16. #16楼 学习2004-09-03 08:56
    灵感之源老弟(当然你的技术比我高不知多少倍):

    看到你说“ASP.NET Starter Kits 的ASP.NET Portal是MS写的例子”,我想说一下,不知对不对?
    ASP.NET Starter Kits应该是微软的一个金牌合作伙伴写的例子(微软的国内金牌合作伙伴也不少,希望能逐步达到人家的水平),即Vertigo Software, Inc.可以看《ASP.NET Starter Kits白页》这个文档,当然也可以看Vertigo Software, Inc.的网站http://www.vertigosoftware.com/
    我是个技术盲,已经学了一段时间了,感觉效率太低了,要学的东西有太多,希望多多向你学习,多多分享你的经验。
     回复 引用   
  17. #17楼 boy1192004-09-03 09:02
    灵感之源:
    你的下一章什么时候写出来,我们都等着看呢
     回复 引用   
  18. #18楼 灵感之源2004-09-03 11:06
    mmm,这个我的确没有去深究。我们也是微软的.NET金牌解决方案提供商;)
     回复 引用   
  19. #19楼 Soaring Tiger2004-09-03 14:15
    不过DNN对每个Module的数据处理都没有做到集中,Module删除了,并不对自动删除对应的数据,时间一长就产生大量冗余数据。而且没有集中处理,非常不直观。 

    ---可以的 
    所有和modules表中moduleID相关的表,都有cascade delete related records属性。

    -----------
    如果是自己开发模块的话,自定义的表的ModuleID与Modules表中的ModuleID要设外键和级联删除。
    但是实际上自己开发模块的时候并不一定要用ModuleID,可以根据需要使用PortalID或TabID。
    以模块为基础的最大好处是部署灵活,但这种部署比较适合做CMS。如果用来做其它的东西,设计就可以改动了。
    其实DNN框架很灵活,不必拘泥于某种固定模式,在其基础上可以做很多东西。
    我也接触DNN有两个月了,有一些心得,希望与大家交流。
    soaring99@163.com
     回复 引用   
  20. #20楼 灵感之源2004-09-03 17:21
    有msn吗?我的是unruledboy@hotmail.com
     回复 引用   
  21. #21楼 hBifTs2004-09-04 23:38
    呵呵:)
    看起来貌似不错的dd啊~
     回复 引用   
  22. #22楼 caca2004-09-06 00:18
    郁闷。。一直不能在其官方网站注册。
     回复 引用