Discuz!NT论坛代码小分析
2009-06-04 18:28
337 查看
Discuz开源代码结构分析
2008-4-11
右图是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主论坛的源码分析
2008-4-11
右图是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论坛代码小分析【转】
- Discuz!NT代码阅读笔记(2)--网站安装自动化--论坛程序安装及初始化过程 (转)
- DZ论坛横排美化,代码详细分析[Discuz 7.0]
- 对discuz的代码分析学习(四)论坛入口文件
- Discuz!NT代码阅读笔记(2)--网站安装自动化--论坛程序安装及初始化过程
- 关于Discuz!NT论坛改模板代码后发生 应输入} 的错误解决方案
- Discuz!NT代码阅读笔记(2)--网站安装自动化--论坛程序安装及初始化过程
- 对discuz的代码分析学习----论坛入口文件(转帖)
- discuz论坛apache日志hadoop大数据分析项目:清洗数据核心功能解说及代码实现
- php中通过curl模拟登陆discuz论坛的实现代码
- php中通过curl模拟登陆discuz论坛的实现代码
- Discuz!NT 论坛整合ASP程序论坛教程
- 安装好Discuz!NT论坛后首页是一片空白!解决办法
- Discuz!!论坛wap功能模块编码的注射漏洞分析
- discuz!nt论坛搬迁后出错,提示:对象名 'dnt_templates' 无效
- 关于Discuz!NT 论坛安装过程中出现的"未能找到路径config\schedule.config的一部分"的解决办法
- Discuz!NT版本论坛帖子调用
- 20110611 DiscuzNT代码研究(2)
- php下获取Discuz论坛登录用户名、用户组、用户ID等信息的实现代码
- ASP.NET网站集成Discuz!NT 3.1论坛详细教程(同步注册和登录)