From 博客堂 Community Server技术分析——CS是如何将三个项目整合到一起的

Community Server技术分析——CS是如何将三个项目整合到一起的

Community Server1.0 Release了,不负众望,成功的将三个优秀的Asp.Net开源项目(AspNetForums、DotText和nGallery)无缝的整合到了一起,而且有非常好的扩展性,有很多地方值得我们借鉴和学习。在以后的随笔中,我将会向大家逐步介绍一些从中学习到的优秀技术和思想(限于水平和对系统的了解并不是太深入,所叙述的可能比较片面,敬请谅解,望不吝赐教)。先就其是如何将三个项目整合到一起简单介绍一下:

AspNetForums、DotText和nGallery这三个项目架构各有特色,且每个项目有一套独立的用户管理系统。CS要整合这三个项目,要解决这样几个问题:将三个项目共同的地方提取出来;在某一个项目的架构基础上或者完全采用一个新的架构来重构;一套共用的用户管理系统。

整体上来说,CS主要还是基于AspNetForums的架构,提取了三个项目中的共用的部分做为公共项目(CommuntyServer.Components和CommuntyServer.Controls),每个项目都从这两个公共项目继承和派生(CommuntyServer.Discussions、CommuntyServer.Blogs、CommuntyServer.Galleries和CommuntyServer.GuestBooks)。对于数据库的访问,主要在CommuntyServer.SqlDataProvider项目中。

CS采用了Asp.Net2.0中的Membership来作为整个系统的用户管理系统,同时它增加了一些自己的用户属性,对用户角色增加了权限分配。

再看看CS的数据库设计,它提取了共同部分,保留了三个项目所需要的所有表,数据库中"aspnet_"开头的表和存储过程都为MemberShip所需。

CS设计非常精妙的一个地方在于cs_Groups、cs_Sections、cs_Threads和cs_Posts表(分别对应于CommuntyServer.Components命名空间下的Group、Section、Thread和Post类),熟悉AspNetForums朋友的应该都知道forums_Groups、forums_Forums、forums_Threads和forums_Posts这几个表,分别表示“版块组”、“版块”、“主题”和“帖子”。有必要先简单解释一下主题和帖子的区别,当我们在论坛发表一个帖子,自然会有人对这个帖子进行回复,那么由这个帖子和其派生的一系列回复帖子组成一个主题,一个主题由多个帖子组成。分析一下论坛、blog和相册的共同点:他们都会有分组、分类;对于每个帖子一般都有回复(对于blog来说每个随笔都有评论,对于相册来说,每个照片也都有评论),发散一下想一想,我们的很多系统,如文章新闻系统、留言板、软件下载等,也都有这些公共的因素:分组、分类、主题、帖子。当然还有一个问题,那就是这些系统虽然有共同的地方属性,但是也有不同的属性,例如照片就还要有照片的尺寸、软件就需要软件的大小类型等信息,所以在cs_Posts表里面,就增加了"PropertyNames"和"PropertyValues"这两个字段,把这些系统各自不同的属性通过序列化存储在这两个字段中。(如果您对序列化还不了解,可以参考我以前写过的两篇blog:《Asp.Net Forums中对.Net中序列化和反序列化的应用》、《MemberShip中对用户资料的序列化》)。

限于篇幅,不多赘述,以后再逐步就一些具体技术问题向大家介绍。

你可能感兴趣的:(server)