代码改变世界

DNN(DotNetNuke)研究手札系列4-框架(硬伤) 1

2004-09-23 21:42  灵感之源  阅读(...)  评论(... 编辑 收藏

对,这章我就要介绍我所理解的DNN存在的硬伤,大家看完了别骂我,更别伤心,因为我在实际开发的过程中提供解决方案。:)

我最近2个多月都在研发某系统,该系统是以DNN为原型。我在花了接近2个月的研究中,总结出:DNN存在几处硬伤。实际上,与其说硬伤,到不如说其目前的发展空间更好:)

虽然参考选型为DNN,不过我们仅仅是参考,出于独立发展和实际需求的考虑,我们并不“抄袭”DNN,仅仅是学习了其最大的特色:Skin技术,而且我们觉得其Skin技术已经相当成熟,因此我们用我们的实现方法,却兼容其Skin/Container格式,毕竟仅仅是XML/HTML的解释。

DNN最大的硬伤:过分松散。这个松散不是指其每个模块想积木那样可以自有放在任何栏目(Tabs)和任何位置,而是指其内容。

举个例子:发表公告。我们一般会一段时间就会发布一篇公告,而这个在DNN的实现似乎就只能:1、修改某公告模块实例的内容;2、隐藏该模块,新建一模块;3、直接删除该模块,新建一模块。

或许这个例子不明显,换一个:文章。文章应该是最常用的功能了,因为大部分内容都可以以文章的形式出现,包括公告、技术文档、新闻、FAQ等等。在DNN中,我们会怎样做了?似乎就只有每篇文章新建一个文章模块实例了,如果不希望显示出来呢(如过时等)?似乎就只能:1、隐藏;2、直接删除。如果使用方法1,隐藏多了,页面就很杂乱;如果使用方法2,假如哪天我想找出来看看呢?如果有深入一点研究的朋友,会提出使用隐藏栏目专门来“收留”这些“孤儿”,但数量一多仍然会杂乱啊!

还有,如果你想对所有同类型的模块进行检索和操作,怎么办?相信你会在各个栏目之间来回切换去寻找。

类似的,其它模块也一样。DNN内置的模块,都仅仅是演示其功能而已,因为它的目标是做一框架,不是做功能内容。实际上,你是否能想到怎样解决?我能想到的,是做集中的列表管理。列表管理的好处就是,随时对任何文章进行操作,不必在栏目之间来回切换,一目了然。

就这样?不,让我们更进一步吧:做个通用的文档管理系统!其实无论是公告、技术文档、新闻、FAQ等等,一般都包括:作者、出处、创建年月日、正文内容、简介、页面打开类型(如本页面、新开页面等)、状态(如未审批、已审批、隐藏等)、图标等。

就这样?不,让我们来再深入点吧:把类型管理都加上去!类型可以广泛地用在任意层子栏目、文章类型等等。这样,文章编辑的时候就可以选择所属类别,更加容易分类管理。

就这样?不,让我们来个彻底的革命吧:集合类型和通用文章,来整合出多个通用模块。如:
1、某类最新文章列表:你只需要把所有层次类型列出来,让用户定义哪个类型和要类多少个,按日期排序就行了。这样,一旦选择了某类型,该类型所属的Top N文章都列出来了。灵活吗?

2、最热文章推荐:这个更简单,选择某类型、然后选择某类型下的某篇文章、定义一个个性化图片,就这样。然后在具体的显示时候,左边弄个图标,右边就显示粗体标题和简介。灵活吗?

3、主题新闻:这个最简单了,跟上2是差不多的,唯一区别就是直接把该内容显示出来,效果就是类似微软首页的最大的那个Flash/Image效果了,点击就可以进入具体的栏目或者文章。还不够灵活?好吧,看下一篇吧:(

大家注意到好处了吗?无论模块有多少个,都只需要定义一次文章,任何文章都可以重现在任何模块,不必重复定义,也不用担心某个模块删除了,文章丢了。

鉴于DNN的可发展空间很大,现在只介绍第一个,接下来会有更加有趣的:)