开源CMS建站项目DNN研究与心得

DNN (Dotnetnuke) 首先是开源的,并且采用BSD开源协议,也就是说你可以任意修改源代码、传播、作为商品出售,仅有的要求就是保留源代码中的版权文字,这就解决了我多年来的心病:我知道动网新闻发布系统、微软官方论坛等都做得相当不错,可惜源代码都是不公开的,并且有着很严格的产权保护,你在做项目时不得不多考虑一些东西,但是DNN不一样,它几乎赤裸裸的以至于你可以为所欲为,并且得到了官方的稳定支持,学习和开发资料相对齐全,这么好的东西,我为什么不采用拿来主义呢?
 
DNN部署是很简单的,没费多大劲,我从官方网站(http://www.dotnetnuke.com)下载了安装版,数据库只支持SQL Server,不过它提供了接口,你可以自己开发让它也同时支持Oracle,Access等,但是工作量不小哦。
 
当我输入localhost进入刚安装完毕的DNN时,启动速度相对很慢,我的笔记本特别兴奋,硬盘使劲的转着,十几秒后终于看到了首页,界面设计属菜鸟级的,一如陈世美相遇秦香莲,没多大兴趣也没多大惊喜,而且扑面盖地的英文,好在本人英文水平也还凑合,据说和子怡姐姐不相上下,整个网站没有Flash。我很快找到了登录窗口,想进入后台看看,程序员嘛,多少都是偷窥狂,都渴望尽早的撕开那美丽的外衣,渴望尽早的感受那惊心动魄的内部结构。
 
我以最高权限Host用户进入了,后台不是我想象中,如动网一样的Outlook菜单,而是和前台没多大区别,多个了工具栏,每个模块,如新闻、友情链接都多了一个小箭头,鼠标晃过去就出现了菜单,很多功能所见即所得,真正震憾之旅开始了,要说清出这一大堆的前因后果,得听我细细道来。
 
我首先遇到的问题是汉化,我不可能拿个英文版的东西给客户吧?人家当时就可以用中文骂死我,但是我不知道DNN如何实现多语言?看了一下开发文档,原来 DNN是以资源包的形式实现的,我当时大笑,英雄所见略同啊。就是有一大堆的xml文件,你要变成中文的,就加个xml文件,按条目将标签对照着翻过来就行了,而强大之处在于,你可以在后台直接上传个中文包就立即汉化,也可将自己手动汉化的内容导出成xml资源文件包。这里特别感谢 dnnChina 网站,将绝大部分都成功翻译成中文了,而且相当专业,我从dnnChina 网站下载完中文包,几秒钟后,网站全成中文的了。不过只对DNN5的版本支持较好,到了DNN7则无法完全汉化了。不过后来经常发现一些乱码,于是我在web.config文件中,把默认编码utf-8换成了gb2312,乱码问题都顺利解决,我当时就纳闷:你 utf-8不是号称支持全球文字吗?怎么一遇到中文就水土不服呢?郁闷了好久,始终不得其解,打电话咨询相关机构,老外一口英文,他说的话我全能听懂,可是我说的英文这家伙竟然一句都听不懂,这老外听力根本不行,于是更郁闷了。
 
汉化问题解决了,那么紧接着是改变页面视觉效果了,这是我最耗时间的地方,客户经常以页面设计来决定整个项目的成败,我当时呕心沥血,穷尽所思,终于设计出了令客户满意的页面,当时真的很崇拜自己,美工编码双料冠军,人世罕见(臭美一下)。那么如何将这些定制的页面套到DNN呢?DNN自己定义了一系列的标准,按照这个标准,我几乎当天就制作做完了HTML页面,传到后台中就自动套上了,真的很神奇啊。
 
皮肤问题搞定,然后就是要实现内容的后台添加了。DNN以模块的形式实现这些功能,比如,客户要一个在线调查,直接插入相关模块就行了,而且各个模块可以在页面中*的移动,很方便。其实所有模块中,最重要的是就是文章管理模块了,可惜DNN没有自带这个模块,上网搜出一个免费的,备受国内开发者推崇的 Article模块,可惜不太好使,没办法,只好自己开发一个。我觉得这才称得上是黄金框架,你开发一个模块,DNN提供了很好的接口,不用改变原系统一行代码,开发完成后,再以插件方式套上去,DNN自动识别并可以立即使用,真正的即插即用。
 
你如果能开发出第一个模块,其他的产品推荐、留言板模块就特别快了,不过很多模块DNN都自带了,不好使的可以到网上去搜,很快就可以找到,后来发现国外好多程序员在网上卖DNN模块,有个我花一天完成的同样功能模块,老外竟然卖2美元,真是黑啊,商业意识真强啊。
 
不过,当下DNN也有一些问题急待解决:1、性能不是很好,我用DNN搭建完成的这个项目后,用LoadRunner测试了一下,50人同时在线,首页打开竟要32秒,并且DNN是很耗资源的,我分析了一下,DNN由于产品化,为支持多语言、多数据库等功能增加了许多额外的代码,自带的模块从数据库读取数据时没做优化,都是按一股脑的绑到了DataSet中,当数据量到万条以上,服务器估计就得撑不住了。
 
2、自带的模块大多不太好使,很多模块连基本的翻页功能都没有,例如友情链接模块,就只支持文字而不支持图片链接,只好自己重新开发了。
 
3.调试代码太耗时间。由于DNN本身代码量就不少,每次要调试一个功能时,你最好旁边放杯茶,当你茶喝完了,要调试的代码也就出来了。后来自己开发模块时干脆就自己建立解决方案,把需要的dll都引入,这才大大提高了开发效率。于是当时我又纳闷了:Windows上千万条代码,也不知他们是怎么调试的?
 
DNN在长达10年的发展过程逐渐被国外的一些公司和组织所接受,并且形成了良好的生态。有大批的开发者和建站者为其发展添砖加瓦,由于平台建设所需的皮肤和模块很多,越来越多的人们使用DNN来建站。反观国内,由于对软件产品的消费意识不强烈,导致DNN发展止步不前也值得我们国人所思的。
大家可以去我的网站上看一下DNN皮肤和模块的介绍,也许会让大家很有启发:http://www.dnntools.net/DNNStore
上一篇:程序员书单_java专项进阶篇


下一篇:Android JNI 学习(十):String Operations Api & Other Apis