共同的父类BusinessBase
上篇文章朋友的评论给了我很大的动力写这个系列的文章,看来大家都比较关注这个系列。为了后续文章做一个铺垫,我在这篇文章的前半部分讲解一下BlogEngine.Net的整体架构,后半部分主要是对于BusinessBase类的分析。
下载源代码以后打开解决方案,我们发现从项目的组织结构上BlogEngine.Net分成两个项目:一个是BlogEngine.Core,顾名思意,它就是BlogEngine.Net的核心逻辑层。所有的业务逻辑和一些功能都在这个项目中体现,实际上这个核心业务层中也有数据访问的一部分,那就是Provider模式。在BlogEngine.Net中,关系数据库或XML等的作用只有一个,那就是存储数据,BlogEngine.Net的业务对象的ID生成是由核心层控制的,而不是用数据存储部分生成的,因为这样可以支持更多的数据源。它不同于很多其他业务系统,数据库里面可能有很多存储过程,触发器,函数等来完成一定的业务运算和数据处理。在BlogEngine.Net中,我们甚至可以使用一个.txt文件来自己开发一个Provider给BlogEngine.Net使用,方法很简单,只要实现BlogProvider(BlogEngine.Net提供),MembershipProvider和RoleProvider就可以了,实际上BlogEngine.Net也在很大程度上利用了.Net本身的经典模型。另外的一个项目是一个站点,主要就是具体的Web实现,但是具体的功能都是调用核心层来完成的。
实际上刚开始看BlogEngine.Net的源代码时我也很难入手,不知道从哪里看起,找不到入口的地方。其实也难怪,官方提供的资料大都是关于使用和开发扩展的,社区里找到的东西也不是自己最想要的。研究了一段时间以后我发现整个BlogEngine.Net都在围绕这BusinessBase这个基类展开,其它的类都是为它提供服务或接收它的消息,例如Provider,Extension等。BusinessBase是所有业务类的基类,里面封装了很多业务类共有的特征。它的子类有:
AuthorProfile:用户的Profile的封装。
Page:这个类实际上是对应着BlogEngine.Net中的一篇静态文章,page和post具体区别不是很重要,感兴趣的朋友可以参照一下官方提供的说明。
Post:在BlogEngine.Net应用最多的一个类,代表作者提交的一篇文章。
Category:文章分类,一篇文章可以属于多个分类,分类之上还可以有父分类。
下图是他们的继承关系:
图中的IPublishable接口我会在以后的文章中做详细的讲解。