程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> BlogEngine.Net架構與源代碼分析系列part8:擴展

BlogEngine.Net架構與源代碼分析系列part8:擴展

編輯:關於ASP.NET

DataStore分析

本系列的第四篇文章我給大家做了關於BlogEngine.Net全局配置的分析。在這篇文章裡我將會對BlogEngine.Net中比較經典的部分DataStore做一個簡單的分析,這個DataStore主要完成了BlogEngine.Net三大擴展特性(Extension,Widget,Theme)的數據存儲部分,它提供了一個擴展特性統一的存儲模型。DataStore是建立在Provider存儲(本系列第三篇文章中介紹過)的上層,本文研究的內容會和後面講到的擴展部分的文章有一定聯系,希望大家繼續關注。

BlogEngine.Net三大擴展特性大多數都是由開發者完成的,也就是說大多數都是後加入到BlogEngine.Net中的,所以這些存儲必須單獨完成,而且對於模型的統一性很重要。既然是由開發者開發,那麼這些標准就顯得格外重要,這樣開發出的部分才可以與系統中的部分很好的集成。這裡所說的DataStore就是指BlogEngine.Core.DataStore空間下的類型。

BlogEngine.Net中的DataStore如何設計的

先看一幅繼承圖吧:

從上圖我們可以看到ExtensionSettings和WidgetSettings是SettingBase的直接子類。ExtensionSettings主要是為Extension而對SettingBase的實現,WidgetSettings是為Widget而對SettingBase的實現,對於Theme整個BlogEngine.Net中目前沒有涉及到。

ExtensionSettingsBehavior,StringDictionaryBehavior,XMLDocumentBehavior這三個類都實現了ISettingsBehavior接口,而ISettingsBehavior只有加載配置和保存配置兩個方法聲明。此外ExtensionType是一個枚舉用來表示擴展的類型。

SettingBase也有加載和保存配置的兩個方法,此外SettingBase中還有一個對於ISettingsBehavior的引用,而SettingBase的加載和保存內部也是通過ISettingsBehavior的保存和加載完成的,這好像是一個橋模式。由以上分析我們可以知道對於Extension的數據加載和保存是通過ExtensionSettings完成的,具體實現是由ExtensionSettingsBehavior來做,ExtensionSettingsBehavior的內部使用BlogService調用Provider完成。對於Widget的數據的加載和保存是通過WidgetSettings完成的,具體實現由StringDictionaryBehavior來做,StringDictionaryBehavior的內部也是使用BlogService調用Provider完成,注意SerializableStringDictionary繼承自StringDictionary並實現了IXmlSerializable來完成字典對象的序列化和反序列化。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved