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主论坛的源码分析