久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

SPB-附錄-SpaceBuilder中的Modules的設計和實現(xiàn)

來自站長百科
跳轉(zhuǎn)至: 導航、? 搜索

導航: 上一頁

在數(shù)據(jù)持久化之前和之后需要做一些操作;

例如:創(chuàng)建文件之前,需要對文件名稱和文件描述進行敏感詞過濾;在文件創(chuàng)建成功之后,需要產(chǎn)生個人動態(tài)和朋友動態(tài);因為這樣的事件是可能變化,或者增減的;而且屬于創(chuàng)建文件這件事情的一些附屬事件;所以為了滿足這種變化,SpaceBuilder使用了監(jiān)聽者設計模式;在創(chuàng)建文件成功前和成功后都會觸發(fā)一系列的事件。以文件為例具體的實現(xiàn)方式:

  • 首先定義委托事件:打開文件項目:

Spacebuilder0035.jpg

如上圖所示,文件模塊的事件包括三個類:

  1. FileEventManager:從配置文件中讀取節(jié)點SpaceBuilder/BlogEventExtensionModules并注冊配置的Modules。
  2. FileEvents:封裝了事件的執(zhí)行。
  3. IFileModule:定義了文件相關事件的接口;文件相關事件需要繼承這個接口。
  • 在業(yè)務邏輯事件的執(zhí)行:File/FileThreads.cs CreateFileThread:
FileEvents.BeforeFileThreadChange(fileThread, ObjectState.Create);
FileDataProvider.Instance().CreateThread(fileThread);
 if (fileThread.ThreadID > 0)
   {
     …..
   }
FileEvents.AfterFileThreadChange(fileThread, ObjectState.Create);

如上代碼所示:

  • 在創(chuàng)建文件之前調(diào)用FileEvents的BeforeFileThreadChange;
  • 在創(chuàng)建文件成功后調(diào)用FileEvents中的AfterFileThreadChange。
  • 在表現(xiàn)層是如何定義這些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,并在文件創(chuàng)建之間注冊了操作:文件主題和描述文本處理。

另外需要在SpaceBuilder中注冊這個Module:web/spacebuilder.config 中:

所在節(jié)點 :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>


參考資料[ ]