WIKI使用導航
站長百科導航
站長專題
- 網(wǎng)站推廣
- 網(wǎng)站程序
- 網(wǎng)站賺錢
- 虛擬主機
- cPanel
- 網(wǎng)址導航專題
- 云計算
- 微博營銷
- 虛擬主機管理系統(tǒng)
- 開放平臺
- WIKI程序與應用
- 美國十大主機
SPB-附錄-SpaceBuilder中的Modules的設計和實現(xiàn)
來自站長百科
導航: 上一頁
在數(shù)據(jù)持久化之前和之后需要做一些操作;
例如:創(chuàng)建文件之前,需要對文件名稱和文件描述進行敏感詞過濾;在文件創(chuàng)建成功之后,需要產(chǎn)生個人動態(tài)和朋友動態(tài);因為這樣的事件是可能變化,或者增減的;而且屬于創(chuàng)建文件這件事情的一些附屬事件;所以為了滿足這種變化,SpaceBuilder使用了監(jiān)聽者設計模式;在創(chuàng)建文件成功前和成功后都會觸發(fā)一系列的事件。以文件為例具體的實現(xiàn)方式:
- 首先定義委托事件:打開文件項目:
如上圖所示,文件模塊的事件包括三個類:
- FileEventManager:從配置文件中讀取節(jié)點SpaceBuilder/BlogEventExtensionModules并注冊配置的Modules。
- FileEvents:封裝了事件的執(zhí)行。
- 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的?
以文件主題和描述文本處理(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>