Community Server(CS)是一个非常优秀的Asp.net开源软件,目前官方发布的系统中包括三个部分:Asp.net Forums、DotText、Gallery。如果你是某个以CS构架网站的会员,你可以很容易的就拥有一个Blog、一个相册、还能在论坛上与他人一起进行讨论,这样就形成一个以User为中心的社区,这也就是起名为Community Server的意义所在了。

CS的构架很巧妙,三套原本不同的开源软件在Telligent Systems的努力下结合在了一起,统一进行用户管理与权限设置(Menbership)、统一进行异常处理、统一进行本地化资源管理(多语言实现)等等。虽然这不能完整地看成是Portal实现,但是从代码角度看已经非常模块化了,可以快速的进行扩展同时又能获得很好的性能。实现这些主要依靠工程中的两个项目:CommunityServerComponents与CommunityServerControls。

CommunityServerComponents中包含一些全局业务逻辑类,如:Globals、Context等、一些接口和用来继承的父类,如:Group、Section、Thread、Post等、还有就是实现Membership的实体类。异常处理与Url Rewrite是通过继承IHttpModule接口实现的,当然要实现IHttpModule的继承就一定要进行配置,该项目中通过类CSConfiguration实现了一些全局的配置等。HttpHandler也得到了运用,主要是处理一些不存在的Url,如读取用户头像的时候就是使用的HttpHandler。缓存作为Web程序提高运行效率最有效的方法之一在该项目中主要是在CSCache类中,该类没有什么高深的代码主要是对缓存方法进行包装,然后供全局统一管理。

CommunityServerControls侧重的是UI表现的业务逻辑,其中包含的很多公用的用户自定义控件,典型的就是Editor、ResourceLabel,ResourceLabel几个项目中的web页面下基本都有他的身影。该项目还有一个重要的目的就是提供Skin功能,TemplatedWebControl为Forums、Blog、Gallery几个项目提供Skin的基类,当然如果你扩展CS添加自己的项目,也是需要继承TemplatedWebControl,具体如何实现换肤后面会有专题进行单独的介绍,Asp.net Forums 原来换肤使用的是皮肤的全名(如:Skin-PostView.ascx),但是在现在的项目中不需要提供全名只在基类中提供“Skin-{0}.ascx”,之后用GetType().Name得到{0},组合后就是全名了。也就是说只要需要扩展皮肤类的类名和皮肤的{0}名字相同,就可以自动的找到他对应的Skin,小小的改进方便了许多。CS使用Membership统一用户与权限管理,而用户与权限管理作为所有扩展项目的基础,因此CommunityServerControls中实现了Membership的UI业务逻辑。

CommunityServerForums、CommunityServerGalleries、CommunityServerBlogs就是三个运用项目的实现了,三层结构,通过大量的继承,抽象等等完成的。CommunityServerGuestBook是一个简单的扩展项目,分析代码你会发现其实CS的扩展式非常容易的,而且高效。

CS在数据库方面也有一些优秀的设计,如全部使用存储过程,很多时候高手都会告诉你,在项目中全部使用存储过程是不理智的,但是CS确这样做。关键一点是他有一个SqlGenerator类和一些xx Query类,这些类可以根据要求产生SQL Text(主要是一些多变的Search和Post查询),然后这些SQL Text作为存储过程的参数被传入,最后使用EXEC执行它得到需要的结果。SQL Text比起存储过程来的灵活,但容易出现漏洞最后被利用出现SQL注入攻击,CS这样的做法一举两得,当然这需要更多的时间去编写代码。还有就是用存储过程实现的数据分页读取等。

CommunityServerWeb项目是所有webpage html、资源文件、配置文件、js等的集合。该项目本身没有逻辑代码,分析主要是目录的结构与安排。

CS与Asp.net 2.0的关系密切,Membership、Localization、MasterPage、Url Rewrite这些在Asp.net 2.0中眼熟的词汇在CS中你可以很容易看到它们的实现,不只是运用,你可以通过代码看到它们是如何实现的。

说了很多优点,最后说一下缺点:由于CS的前身是Asp.net Forums,在目前发布的版本中还可以很容易的看到Forums残留的影子,如果不了解其发展的人分析起来一些变量会让你摸不着头脑,另外基础构架部分也有一部分代码与Forums跌在了一起,不过我想随着下一个版本,或者下下个版本的发布CS会更有吸引力 ,我是非常希望CS下个版本发布的时候加入WebPart等更多的特性。

你可以通过以下地址下载到源代码:http://communityserver.org/   官方站

转载于:https://www.cnblogs.com/wzyexf/archive/2006/04/01/364234.html

Community Server专题一:概述Community Server相关推荐

  1. Community Server专题五:IHttpHandlerFactory

    Community Server专题五:IHttpHandlerFactory<?xml:namespace prefix = o ns = "urn:schemas-microsof ...

  2. 技术公开课:SQL Server 高可用性解决方案概述(下)

    2014年4月10日(周四) 20:30-22:00 [技术公开课]4月10日资深数据库工程师舒永春带来<SQL Server高可用性解决方案概述下篇>精彩课程,SQL Server 高可 ...

  3. filestream_SQL Server FILESTREAM内部概述

    filestream In the article FILESTREAM in SQL Server, we provided a SQL Server FILESTREAM overview wit ...

  4. SQL Server应用开发概述

    SQL Server是新一代的数据库平台,集成了更多.更优秀的功能特性.本章主要对SQL Server概要介绍,主要介绍如何创建数据库.如何管理权限.如何执行备份与恢复. 1 SQL Server简介 ...

  5. SQL Server查询存储–概述

    The SQL Server Query Store is a relatively new feature introduced in SQL Server 2016. It is basicall ...

  6. sql示例_SQL Server Lead功能概述和示例

    sql示例 This article explores the SQL Server Lead function and its usage with various examples. 本文通过各种 ...

  7. SQL数据库引擎服务SQL Server启动参数概述

    In the SQL world, it is an important activity to perform SQL Server installation for a database admi ...

  8. SQL Server高可用性部署实施 SQL server 群集

    SQL Server高可用性部署实施 SQL server 群集 2010-09-27 11:15:23|  分类: 数据库 |  标签:无 |字号大中小 订阅 SQL Server高可用性部署实施 ...

  9. sql server调试_使用SQL Server扩展事件来调试应用程序

    sql server调试 介绍 (Introduction) Often enough, multilayer software has bugs. SQL Server Extended Event ...

  10. 使用SQL Server更改跟踪创建SQL Server审核

    This continuation of our SQL Server auditing series is on SQL Server Change Tracking and will cover ...

最新文章

  1. 好事也要好做---孔子责子贡
  2. linux y脚本,Linux中脚本的使用方法
  3. ED/EP系列5《消费指令》
  4. 数据结构与算法笔记(十二)—— 查找算法(顺序查找、二分法查找)
  5. 读取缓存行的伪共享问题
  6. BAT笔试试题常见试题总结含答案(持续更新。。。)
  7. Java开发中Netty线程模型原理解析!
  8. QT实现绘制3D基本形状
  9. js执行shell命令的几种方式(Node)
  10. 为Java应用程序加上退出事件处理(ShutdownHook)
  11. vue+node前后端分离接口调用(初学者)
  12. mysql8如何迁移_mysql8.0.11数据目录迁移的实现
  13. cv mat 灰度值和_c++ 访问OpenCV中灰度图像的像素值
  14. JQuery Ajax 解析
  15. 让你提前认识软件开发(40):既要写好代码,又要写好文档
  16. tensorflow之relu
  17. eclipse 使用svn导入web项目
  18. 互联网金融的前世、今生和未来-系列三(今生):一场跨界的战争
  19. ai自动生成字幕软件有哪些?自动生成字幕软件推荐!
  20. Digester基本用法

热门文章

  1. Android 设置TextView字体加粗
  2. android 隐藏手机底部虚拟按键
  3. 20060427: 部分汉化Together Workflow Editor
  4. 神经网络中常用的激活函数
  5. 注册中心—常见注册中心组件对比分析
  6. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁
  7. spring控制事务:声明式事务(XML)事务的传播行为
  8. 探讨8.0版本下后台service存活机制及保活
  9. 多重for循环如何提速
  10. Python 38 初识数据库