/// <summary>
/// 主题信息描述类
/// </summary>
public class TopicInfo : Discuz.Entity.TopicInfo
{
[MongoAlias("attention")]
public new int Attention { get; set; }
///<summary>
///主题tid
///</summary>
[MongoAlias("tid")]
public new int Tid { get; set; }
/// <summary>
/// 板块名称
/// </summary>
[MongoAlias("forumname")]
public new string Forumname { get; set; }
///<summary>
///版块fid
///</summary>
[MongoAlias("fid")]
public new int Fid { get; set; }
///<summary>
///主题图标id
///</summary>
[MongoAlias("iconid")]
public new int Iconid { get; set; }
......
上面的MongoAlias属性就是属性别名,它就是MONGODB中所存储的数据字段名称。
介绍到这里,再回到正文。
因为这两个工具都是在数据库层面进行缓存的,所以它对于原有的DISCUZ!NT中的缓存系统而言,与数据库帖的更近,所以对原有的业务逻辑改造,
就停留在了数据访问层"DISCUZ.DATA.dll"中了,其实到这里,就看出了当初为什么要分层,以及分层带来的好处了。
比如在Discuz.Data.Topics这个类中添加了这两个静态变量:
/// <summary>
/// 是否启用TokyoTyrantCache缓存用户表
/// </summary>
public static bool appDBCache = (EntLibConfigs.GetConfig() != null && EntLibConfigs.GetConfig().Cachetopics.Enable);
public static ICacheTopics ITopicService = appDBCache ? DBCacheService.GetTopicsService() : null;
前者用户判断是否启用主题缓存,后者则获取相应的缓存服务实例(前面配置文件中已做相应说明)。
这样,在已有的数据访问代码中加入相应的缓存逻辑,比如获取主题信息:
/// <summary>
/// 获得主题信息
/// </summary>
/// <param name="tid">要获得的主题ID</param>
/// <param name="fid">版块ID</param>
/// <param name="mode">模式选择, 0=当前主题, 1=上一主题, 2=下一主题</param>
public static TopicInfo GetTopicInfo(int tid, int fid, byte mode)
{
TopicInfo topicInfo = null;
if (appDBCache)//新增代码
topicInfo = ITopicService.GetTopicInfo(tid, fid, mode);
if(topicInfo == null)
{
//原代码
IDataReader reader = DatabaseProvider.GetInstance().GetTopicInfo(tid, fid, mode);
if (reader.Read())
topicInfo = LoadSingleTopicInfo(reader);
reader.Close();
if (appDBCache && topicInfo != null)
ITopicService.CreateTopic(topicInfo);
}
return topicInfo;
}