SPB-附录-SpaceBuilder中的Modules的设计和实现

来自站长百科
跳转至: 导航、​ 搜索

导航: 上一页

在数据持久化之前和之后需要做一些操作;

例如:创建文件之前,需要对文件名称和文件描述进行敏感词过滤;在文件创建成功之后,需要产生个人动态和朋友动态;因为这样的事件是可能变化,或者增减的;而且属于创建文件这件事情的一些附属事件;所以为了满足这种变化,SpaceBuilder使用了监听者设计模式;在创建文件成功前和成功后都会触发一系列的事件。以文件为例具体的实现方式:

  • 首先定义委托事件:打开文件项目:

Spacebuilder0035.jpg

如上图所示,文件模块的事件包括三个类:

  1. FileEventManager:从配置文件中读取节点SpaceBuilder/BlogEventExtensionModules并注册配置的Modules。
  2. FileEvents:封装了事件的执行。
  3. IFileModule:定义了文件相关事件的接口;文件相关事件需要继承这个接口。
  • 在业务逻辑事件的执行:File/FileThreads.cs CreateFileThread:
FileEvents.BeforeFileThreadChange(fileThread, ObjectState.Create);
FileDataProvider.Instance().CreateThread(fileThread);
 if (fileThread.ThreadID > 0)
   {
     …..
   }
FileEvents.AfterFileThreadChange(fileThread, ObjectState.Create);

如上代码所示:

  • 在创建文件之前调用FileEvents的BeforeFileThreadChange;
  • 在创建文件成功后调用FileEvents中的AfterFileThreadChange。
  • 在表现层是如何定义这些Modules的?

Spacebuilder0036.jpg

文件主题和描述文本处理(FileThreadFormatting )为例说明:

namespace SpaceBuilder.File.Modules
{
    /// <summary>
    /// 文件主题和描述文本处理
    /// </summary>
    class FileThreadFormatting : IFileModule
    {
        #region IFileModule 成员
        public void Init(FileEventManager em, System.Xml.XmlNode node)
        {
            em.BeforeFileThreadChange += new FileThreadEventHandler(em_BeforeFileThreadChange);
        }
        void em_BeforeFileThreadChange(FileThread fileThread, SpaceBuilder.Common.GlobalEventArgs e)
        {
            // 代码部分 省略
        }
        #endregion
    }

如上面的代码所示:这里定义的Module继承了IFileModule,并在文件创建之间注册了操作:文件主题和描述文本处理。

另外需要在SpaceBuilder中注册这个Module:web/spacebuilder.config 中:

所在节点 :SpaceBuilder/FileEventExtensionModules:

<FileEventExtensionModules>
<add name = "FileThreadFormatting" type = "SpaceBuilder.File.Modules.FileThreadFormatting, SpaceBuilder.File.Web" />
<add name = "FileCommentFormatting" type = "SpaceBuilder.File.Modules.FileCommentFormatting, SpaceBuilder.File.Web" />
<add name = "FileSectionFormatting" type = "SpaceBuilder.File.Modules.FileSectionFormatting, SpaceBuilder.File.Web" />
<add name = "DisposeActivityForFile" type = "SpaceBuilder.File.Modules.DisposeActivityForFile, SpaceBuilder.File.Web" />
<add name = "DisposePointForFile" type = "SpaceBuilder.File.Modules.DisposePointForFile, SpaceBuilder.File.Web" />
<add name = "PrepareForFileThreadIndexModule" 
type = "SpaceBuilder.LuceneSearch.PrepareForFileThreadIndexModule, SpaceBuilder.File.Web" />
</FileEventExtensionModules>


参考资料[ ]