Roclog博客系统源码浅析(2):业务逻辑

Publish: 2010-1-31 21:08:58 Category: Technology

Roclog 博客系统源码浅析(1):综述中,我们已经了解到从一个请求开始到浏览器展示出页面系统内部做了什么,当然只是大致流程。其他步骤都很简单,可以忽略。但是对于查询数据库返回实体,到将生成的字符串输出给浏览器这个过程中具体发生了什么,我们还不知详情,这一篇就来浅析。

Logic类库包含了Roclog的大部分业务逻辑,流程都差不多,所以我们还是以前台请求Page页面为例来窥见。

首先是Logic.Web.WebPage.OutWrite方法先中获得Page实体(Setting实体略,这里有点疑惑,系统设置一般没人经常改,为什么不缓存?),如图。

然后会将实体中键的值进行XML格式化,并拼接字符串,结果如图。

至此,Page页面的XML化数据已经OK,当然现在还不能直接转换,因为还少很多XML数据,比如最新文章,最新评论,好文章,热门文章,随机文章,分类,统计信息等等。接下来调用Logic.Web._WebBaseXml.OutBaseXml方法来获取以及处理这些数据,这里首先判断是否缓存然后再获取,其他的过程与上述Page实体中键的值进行XML格式化并拼接大同小异。只是这里有N个+=操作符,- -,换成StringBuilder.AppendForma方法是不是效率方面会好很多?

经此,最终字符串如下图。

其实这里实在没有什么好说的,大量的查询数据库、拼接而已。不过,获取“所有”XML化数据通通返回,这一点让我觉得很诡异,因为不管是不是在XSLT文件中调用(比如是否调用随机文章等)都会这样。下面来看看最终XML是如何通过XSLT生成XHTML(或者直接返回XML数据,比如RSS)发送给浏览器的,这也是Template.XsltTemplate类的职能。直接抓图吧。

其中_argList为XsltArgumentList类的实例,并AddExtensionObject("roclog:function", new _ALFun()),所以_ALFun类中共有方法可以直接在XSLT文件中调用。一个比较有趣的现象,在Template.XsltTemplate类构造函数中有Stopwatch.Start方法,在输出给浏览器之前有Stopwatch.Elapsed属性,这告诉我们页面底部的Processed Time只是内存中XML文件转换所用的时间,并不包括查询数据库以及拼接字符串的时间。

好吧,这一篇又完了,果真是浅析啊。

标签: Roclog, 博客, 源码

评论列表 »

  1. 汤尼尔 2010-3-4 13:44:25

    嗯,今后会注意使用StringBuilder.AppendForma,谢谢提醒哈~

     客气啦。

1/1, 1«1»

添加新评论 »