Discuz开源代码结构分析 2008-4-11 Carl Xu

Discuz开源代码结构分析
2008-4-11
Carl Xu
/*
分析DZNT的开源代码大体层次结构
*/
右图是DiscuzNt(以下简称DZ)开源代码的方案结构
20个项目,看上去好像很庞大,现在我们来分析一下它的层次,从本人的个人分析角度上看discus是比较典型的应用三层架构,可以说在架构上是比较普通的,
左图是DZ的几个数据层项目,Data项目提供公用访问接口, Data.Access 和Data.MySql以及Data.SqlServer是公用接口的三种数据访问层的实现,
IDataProvidor接口所提供的接口数量惊人…..代码行将近5000,DZ的业务逻辑的确非常庞大,其实这样的接口编写方式,个人是比较抵制的,这样看起来,这种实现纯粹是为了接口而写接口,在实现了普通访问层代码后,在反过来把所有实现的方法做为基类的接口成员,这个方式在实际中是没有问题的,很多时候我们是倾向于这么做,只是这样的5000行的接口代码就实在不敢恭维…依此可见,DZ的多数据库支持是建立在这样一个为每种数据库重建访问层实现的方式上的,可幸的是这没有影响它的运行性能,^^
继续分析,Discuz.Data.DatabaseProvider 提供数据层工厂方法以实现多数据库支持; ,

那么以上就是数据访问层的分析,很普通的做法,DZ在重构的时候看来只是简单的实现接口编程,没有对业务结构做出新的重构;

再来看业务层和web层,因为如前面分析所说,已经实现了普通而良好的数据工厂和数据访问层接口,所以上层就是完全面向接口的了,在这几个层次里也看不到任何的数据库访问,sql语句等,
这个就是web层,它把后台页面代码分离成为独立的dll,这样做是处于版权的考虑,让你不能获得源代码,获得了也不能轻易的修改,^^这个做法也使得以下的web目录非常的轻便,只有几个文件和目录,通常编写庞大的web应用页面必然会很多,没有全盘考虑,一下就会建好多的页面出来,而很多情况,页面中的部分甚至整个页面是功能类似的,因此应该考虑以组件,控件等方式进行复用,DZ就是个例子.

下面这几个是作为DZ的插件功能,用来在后续开发中扩充应用,以类似方式定义程序集名称,按照一定的规范来编写DZ平台的插件,这是现在普遍采用的方式,


一些网站或者开源控件会提供这样的规范,让开发人员添加一些基于该平台等的应用,DZ的具体插件应用我就不清楚了 不想接着看^^主要是分析大体结构


这些则是一些通用的方法程序集,没有什么好讨论的,里面封装的一些类可以拿出来单独使用,还是挺方便的,Discuz.Cache实现DZ的缓存机制,

以上就是DZ主论坛的源码分析

Discuz!NT论坛代码小分析【转】相关推荐

  1. Discuz!NT论坛代码小分析

    Discuz开源代码结构分析 2008-4-11 右图是DiscuzNt(以下简称DZ)开源代码的方案结构 20个项目,看上去好像很庞大,现在我们来分析一下它的层次,从本人的个人分析角度上看discu ...

  2. 在Sharepoint 2007 整合Discuz Nt论坛

    在Sharepoint里整合Discuz Nt论坛后,论坛用户和Sharepoint将共享登录名 不管在整合后,有两点需要注意: 1)这里的整合是若整合 2)discuz提供的接口真的很烂,有时候会出 ...

  3. 安装好Discuz!NT论坛后首页是一片空白!解决办法

    为什么当我安装好论坛后首页是一片空白!      当出现此问题时,是因为您在dnt.config中设置的<forumpath>值不正确,导致程序无法正常的使用HttpModule来接管HT ...

  4. 关于和discuz!nt论坛的整合

    做网站的时候需要和discuz!.nt论坛整合,遇到问题如下: 1.web.config的整合 在这里需要注意编码的整合,一般情况我们会按装论坛的编码,如下: <globalization    ...

  5. ASP.NET网站与Discuz!NT论坛整合

    1.引入5个DLL到项目中 分别是 using Discuz.Common; using Discuz.Forum; using Discuz.Config; using Discuz.Entity; ...

  6. discuz!nt论坛搬迁后出错,提示:对象名 'dnt_templates' 无效

    2007年10月30日 星期二 16:23 对象名 'dnt_templates' 无效解决方法: --解决重装系统并还原论坛数据库后,数据库帐号不关联的问题. --注意请用sa帐号 进行如下操作 - ...

  7. Discuz!NT论坛与RTX集成

    discuz论坛与腾讯通RTX的集成,包含代码并附有详细的说明哦 集成功能: 单点登录,数据同步,消息提醒,状态感知 详细的下载地址:http://download.csdn.net/download ...

  8. Discuz!NT论坛添加背景音乐

    背景音乐就是在打开网页时听到的音乐. <bgsound src="音乐文件地址" loop=#> #=循环次数 ,-1表示无限循环. 例: <bgsound sr ...

  9. Discuz!NT 中的数据库链接类(重构到抽象类工厂模式)

       在7月份中我曾经写过一篇随笔叫,叫" .NET2.0 框架中的 AbstractFactory 模式 " . 里面主要说了在2.0框架下的数据库链接工厂中新增的几个类,而这几 ...

最新文章

  1. Linux系统Sudo基本用法
  2. LCD12864示例子程序
  3. Leaflet中使用Leaflet.Pin插件实现图层要素编辑效果
  4. 前端经典案例——购物车,Jquery实现
  5. 趣谈哈希表优化:从规避 Hash 冲突到利⽤ Hash 冲突
  6. SAP UI5应用和Hybris Commerce的国际化(internationalization)支持
  7. 360健康助手文件存储位置 获取图片
  8. C++即时通讯实现原理及常见问题
  9. js如何操作或是更改sass里的变量
  10. linux下解压7z压缩包分卷
  11. OSPF实验:OSPF认证
  12. .NET IO 复习中的误区
  13. 用PROTUES来演示80C51的的16MHZ晶振的示波器演示
  14. SpringBoot2.0系列教程(四)Springboot框架自定义消息转换器
  15. 给高考生填报专业和志愿的建议
  16. 惊呆了!我用 Python 可视化分析和预测了 2022 年 FIFA世界杯
  17. 应用层协议 HTTP HTTPS
  18. 太阳系在银河系中的真实运动轨迹
  19. Unity3d游戏引擎Windy系列教程:地形的创建
  20. 关于非IE浏览器下Flash上传控件HTTP ERROR 302

热门文章

  1. FTP无法显示远程文件夹
  2. oracle 全文检索 词库,最全中文情感和语义词库(包含好几种)
  3. 【Unity】MineCraft我的世界沙盒游戏开发流程
  4. 金蝶专业版账套启用后,修改是否允许负库存
  5. netsh命令设置IP地址/DNS服务器地址(域设置)
  6. 怎么选合适的运动耳机、运动耳机最新推荐攻略
  7. 给初恋男生的几点建议
  8. Excel表怎么快速移动整行、整列、整块区域数据
  9. ICLR 2019:A CLOSER LOOK AT FEW-SHOT CLASSIFICATION (ACK-FSC)
  10. 深度学习三大框架(对比)