DNN系列介绍
研究手札系列1-背景、现状
首先,请不要忙着看这篇文章,尝试去官方网站下载一个最新版本的来安装看看,仔细看看安装说明文档、各种技术的白皮书,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、多语言;
DNN在11月份推出3.0x,改进包括:
1、工程的分离:缺省多达57个工程,把所有HTTP Handlers、桌面模块都独立出来了,这个非常有弹性和可扩展性!目录结构的清晰性,根据业务逻辑的工程分离带来了目录结构的清晰性,内核不再和桌面模块混合在一起!
2、数据库表和存储过程添加“DNN_”前缀,这个我之前提了建议,看来DNN团队还是善于吸纳建议的;
3、配置设定的多层次分类,可用功能的和不可用功能的对应显示非常清晰明了;
4、站点模版,向导式导入导出整个网站,用户体验非常良好;
5、整个站点改用比较时尚的深蓝色,相当养眼;
6、内置站点搜索(和管理)、多语言支持(和管理),模块可拖拽,提供了强大的文件管理;
研究手札系列2-框架(概述)
从这章开始介绍DNN的框架,DNN的框架可以从以下角度分:
1、目录,中国Rainbow已经对各目录和各文件的用途写了比较详细了,我不再重复,我只从主要框架上说:
a.管理(Admin):
a1.容器(Container)
a2.文件(File)
a3.模块定义(ModuleDefinitions)
a4.私用程序集上传(PAUpload)
a5.门户(Portal)
a6.外观/皮肤(Skin)
a7.栏目/标签(Tabs)
a8.用户(Users)
b.功能组件(Components)
b1.容错(Exceptions)
b2.日志(Logging)
b3.日程(Scheduling)
c.UI控件:
c1.HTML编辑器(FTB)
c2.菜单(SolpartMenu)
d.桌面模块(DesktopModules)
从中可以看出,DNN的目录框架相当紧凑,你在根目录只能看见几个文件,而管理目录是整个门户的核心,功能组件是骨架,UI控件是核心应用,桌面模块是具体业务应用。
2、按核心功能,DNN可以分成以下几块:
a、外观/皮肤(Skin),包括Skins、Tabs、Modules、ModuleDefinitions、Containers等;
b、管理,包括Portal、Users、Log、Logging、Schedule、PAUpload、Security、Files等;
由此看出,Skin的地位在DNN中是最核心的。
DNN的应用了颇多的.NET技术,如大量继承、重载、代理等,实现了如抽象的数据访问(DataProvider)、数据缓存(DataCache)、多线程日程(Scheduling)、错误处理(Exceptions)、空类型(Null)等功能,我稍后将逐一为大家深入介绍各种技术的特点、实现和应用。
研究手札系列3-DNN的未来(蓝图)
DNN官方称蓝图有3个阶段(Stage):
第一种是Build(编译),也就是当前正在研发的阶段,基本上功能都完成了,可能在进行一些不同的完善而已。
第二种是Design(设计),在这个阶段,所有想法都被彻底讨论、定案,每个任务都有负责人进行,耗时比较长。
第三种是Concept(想法),实际上是在社区论坛中,各位会员提出的功能增强要求,一般估计是猴年马月才进入设计阶段的,还或许以后都不会实现。
目前处于Build阶段的,主要有:
1、Friendly URLs(友好链接),这个在之前的章节介绍过了,大家自行参看;
2、Localization ( Static ) (本地化-静态),实际上只把传统的HTML的文本转成ASP:Label而已;
3、Portal Search(门户搜索),同1
目前处于Design阶段的,主要有:
1、Data Model(数据模型),改进DNN前身IBS的数据库设计的约束;
2、Document Security(文档安全),基于角色的上传文件管理。应用IIS的文件安全.resources扩展保护机制,因此不需要额外的数据库或者本应用目录以外的目录以减低其限制;
3、Portal Module Definitions(门户模块定义),到目前为止,门户和模块之间的关联是通过PortalModuleDefinitions表来实现,而具体操作是必须使用用Host Fee来在不同的子门户间共享。现在要进行改造,让Host Fee作为可选;
4、SSL(安全套接字层),是的,门户实现SSL相当有必要;
5、Weblog Module(博客),看来博客实在是大热,连官方都要做自己的博客模块。看看啥时候自己也做了Wiki(维客):)
6、Windows Authentication(Windows身份认证),整合Windows的安全机制,包括域等;
目前处于Concept阶段的,主要有:
1、Authentication(增强型身份认证),看来网络太不安全,啥安全法子都想出来要实现安全的门户;
2、Browser/Device Support(对浏览器/设备的支持),(待续)
3、Core Modularization(核心模块化),(待续)
4、Localization ( Content )(本地化-内容),(待续)
5、Navigation Abstraction(浏览抽象化),(待续)
6、Portal Groups(门户组),(待续)
7、SDK Version(增进对其它非VS.NET环境的支持)?(待续)
8、Web Farm Support(增进对Web Farm的支持)?(待续)
9、WebPart Integration(Web部件整合),(待续)
研究手札系列4-DNN的具体安装
我在这里以3.0.7为蓝本稍做详细点的说明,2.x雷同:
1、下载:首先下载最新版本的DotNetNuke3.0.7- http://prdownloads.sourceforge.net/dnn/DotNetNuke_3.0.7.zip?download;
2、创建数据库:在MS SQL Server中创建一新数据库,如DotNetNuke307;
3、配置你的DNN:打开web.config文件,
1)搜索“SiteSqlServer”,Database为DotNetNuke307(就是上面新建的数据库),uid为MS SQL Server是登录用户,pwd为登录密码;
2)搜索“debug”,把debug的值改为true,则为“”,这样是允许运行时调试;
3)搜索“globalization”,可根据实际情况,把requestEncoding/responseEncoding/fileEncoding改为你想要的编码,如“GB2312”(简体中文);
4、安全访问性:
1)NTFS:把你的DotNetNuke目录的安全属性中添加上NETWORK SERVICE用户,并将该用户的权限设为允许读取、写入、修改。
2)非NTFS:如果你的DotNetNuke所在硬盘分区的文件系统不是NTFS,则不需要做任何操作;
5、虚拟目录:在IIS中添加DotNetNuke的虚拟目录,如DotNetNuke(其它也可,如DotNetNuke307),物理路径指向DotNetNuke所在目录,这样就能做到所有版本的DNN都不冲突,包括数据库与虚拟目录;
6、运行:在浏览器中打开http://localhost/dotnetnuke,稍等一会,DotNetNuke会自动初始化数据库等信息,便可体验DotNetNuke最新版本。
7、个性化:
1)汉化:在DotNetNuke中国官方网站DNNChina上有下载DNN3.0.4汉化版。
2)密码:admin的密码比较容易改,不少网友反馈host的密码不知道怎样改,在3.0.x中,用户可以点击portal-》superuser accounts,编辑host用户,修改密码。
附录:
一些比较好的英文资源:
1、DotNetNuke:http://www.dotnetnuke.com/
2、DNN入门经典,这里已经说得很好,虽然是英文的:http://www.devx.com/codemag/Article/21572/1954?pf=true
3、DNN文档:http://www.dotnetdoc.com/Default.aspx?tabid=29
4、论坛:http://www.asp.net/Forums/ShowForum.aspx?tabindex=1&ForumID=90
5、DNNGuide:http://www.dnnguide.com/
6、DNN Related:http://netdatadesign.com/Default.aspx?tabid=42
7、dnnJungle:http://dnnjungle.vmasanas.net/
8、DNN Resource Portal:http://dnn.johndcooper.com/
9、KodHedZ Development and Support Network:http://www.kodhedz.com/
10、MagicModules:http://www.magicmodules.com/Default.aspx?tabid=1
11、dnn.com.au:http://www.dnn.com.au/Default.aspx?tabid=1
12、C#版DNN:http://www.csharpnuke.com/
13、DNN帮助:http://www.dotnetnukehelp.com/
14、DNN Nuked http://www.dotnetnuked.com/DesktopDefault.aspx
15、http://www.schmidtsoftware.com/DotNetNuke/
一些相关DNN中文资源
1、中国DNN:http://www.dnnchina.net/(致力于DNN本地化和DNN二次开发,在这里,你可以找到研究国内研究DNN的一些BLOG链接,也可以找到一些官方文档的汉化资料)
2、DNN中文技术支持:http://forum.pspsoft.com/ShowForum.aspx?ForumID=24