今天我們來介紹 IsLine.HttpContent.HttpContentProvider命名空間:
這個Provider主要封裝了對緩衝、Session與Cooike的操作,該空間下主要有三個類:CookieProvider、SessionProvider、CacheProvider。
關於約束
這三個類庫統一實現ICapability介面,ICapability繼承自IBaseCapability介面,IBaseCapability規範了HttpContentProvider的基礎能力,而ICapability則是對基礎能力的擴充,如下:
代碼
namespace IsLine.HttpContent.HttpContentProvider
{
public interface IBaseCapability
{
bool Remove(string Name);
bool IsExit(string Name);
}
public interface ICapability : IBaseCapability
{
object GetContent(string Name);
bool UpdateContent(string Name, object value);
}
}
可以看出,介面主要約束了如何刪除、獲得與更新一個對象,即約束了Session、Cookie、Cache的行為。
CacheProvider類
首先來看看有關Cache的操作,CacheProvider支援.Net兩種類型的Cache:運行時Cache(HttpRuntime.Cache)與上下文Cache(HttpContext.Current.Cache),這兩種Cache有什麼區別呢?這裡簡單的解釋一下:
HttpRuntime.Cache是Application層級的,而HttpContext.Current.Cache是僅對當前WEB頁面請求才有效。換句話說,HttpRuntime Cache所有的web與非web程式都可以調用,而HttpContext則只能用在WEB中。
緩衝中的資料是易失的,資料並不是在整個應用程式生命週期中都儲存在記憶體中,由 ASP.NET 管理緩衝,它會在項到期、無效、或記憶體不足時移除緩衝中的項。還可以配置應用程式緩衝,以便在移除項時通知應用程式。所以,你並不知道緩衝在什麼時候會失效,即使你已經配置了依賴項。
關於緩衝的到期有2種類型:
到期類型 |
說明 |
滑動視窗 |
指定某項自上次被訪問後多長時間到期。 |
絕對到期 |
指定某項在設定的時間到期,而不考慮訪問頻率。 |
可以將緩衝中某一項的生存期配置為依賴於其他應用程式元素,如某個檔案或資料庫。當快取項目依賴的元素更改時,ASP.NET 將從緩衝中移除該項。
CacheProvider類支援以下2種依賴:
|
說明 |
檔案依賴項 |
緩衝中的項依賴於外部檔案。如果該檔案被修改或刪除,則快取項目也會被移除。 |
SQL 依賴項 |
緩衝中的項依賴於 Microsoft SQL Server 2005、SQL Server 2000 或 SQL Server 7.0 資料庫中表的更改。對於 SQL Server 2005,緩衝中的項可依賴於表中的某一行。 |
使用CacheProvider中的方法
方法 |
說明 |
CacheProvider() |
建構函式 |
CacheProvider(string cacheName) |
建構函式,參數指明了需要操作的緩衝名稱 |
CacheProvider(CacheType useCacheType, string cacheName, CacheDependencyType cdt,object depend) |
建構函式,CacheType指明緩衝類型,可以是運行時或上下文Cache,預設為運行時Cache;cacheName為需要操作的緩衝名稱;CacheDependencyType為依賴項類型,可以是sql或檔案; depend為具體依賴項 |
Object GetContent() |
獲得預設緩衝內容 |
Object GetContent(string Name) |
獲得緩衝內容,參數指明了需要操作的緩衝名稱 |
Bool UpdateContent(object o) |
更新或建立預設緩衝內容 |
Bool UpdateContent(string Name,object o) |
更新或建立緩衝內容,參數指明了需要操作的緩衝名稱 |
bool Remove() |
移除預設緩衝 |
bool Remove(string Name) |
移除緩衝,參數指明了需要操作的緩衝名稱 |
bool IsExit() |
判斷預設緩衝是否存在 |
bool IsExit(string Name) |
判斷緩衝是否存在,參數指明了需要操作的緩衝名稱 |
緩衝依賴項可以以參數方式統一傳入,這樣方便了開發人員。SQL緩衝只針對SQL SERVER資料庫有效,指定使用檔案快取還是資料庫緩衝,可以通過CacheDependencyType參數達到目的,CacheDependencyType是一個枚舉值,在IsLine.HttpContent.HCDataTypeEnum命名空間下,IsLine.HttpContent.HCDataTypeEnum命名空間:
代碼
namespace IsLine.HttpContent.HCDataTypeEnum
{
public enum DateType
{
Days,
Hours,
Years,
Minutes
}
public enum CacheType
{
HttpRuntime,
HttpContext
}
public enum CacheDependencyType
{
Sql,
File,
None
}
public enum RemoveType
{
RemoveInput,
RemoveAllExcludeInput
}
}
需要注意的是,即使使用CacheProvider(string cacheName)指明了需要操作的Cache,但是如果後面的代碼中,執行個體調用的方法中包含其他Cache的名稱,那麼以後使用不帶Cache名稱參數的方法時,將會操作那個新的Cache,而忽略建構函式中指明的Cache。
例如:
CacheProvider cp = new CacheProvider(“A”);
cp.GetContent(); //這一步將獲得Cache“A”的內容
cp.IsExit(“B”) //這一步檢測Cache“B”是否存在
cp.GetContent(); //這一步將獲得Cache“B”的內容,而不是建構函式中的Cahce“A”
我是李鳴 歡迎您關注我的下一篇文章。
IsLine FrameWork是一個開源的企業級系統開發架構,目前已有以下系列:
IsLine FrameWork系列之一——第一次的親密接觸
IsLine FrameWork系列之二——命名空間與契約
IsLine FrameWork系列之三--七種武器
IsLine FrameWork系列之四--DataProvider 資料訪問(上)
IsLine FrameWork系列之五--DataProvider 資料訪問(中)
IsLine FrameWork系列之六--DataProvider 資料訪問(下)
IsLine FrameWork系列之七--AppLogProvider日誌架構(下)
IsLine FrameWork系列之八--ExceptionProcessProvider異常架構(上)
IsLine FrameWork系列之九--ExceptionProcessProvider異常架構(下)
IsLine FrameWork系列之十--HttpContentProvider 訪問緩衝