欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

ESBasic 可復用的.NET類庫(13) -- 分組對象

系統 1813 0

1. 緣起:

假設我們的訂單系統需要管理所有未處理的訂單,而客人經常需要查詢屬于自己的未處理的訂單列表。另外,可能客服人員也需要根據訂單 ID 迅速地找到對應的未處理訂單。基于第一個需求,我們就可以將未處理的訂單依據客人的帳號進行分組管理。

我設計了 ESBasic.ObjectManagement.Managers.IGroupingObjectManager 分組對象管理器來完成對對象進行分組管理的功能。

分組對象管理器的形象示意圖如下:

ESBasic 可復用的.NET類庫(13) -- 分組對象管理器 IGroupingObjectManager

2. 適用場合:

當你的需求覆蓋以下條件時,就非常合適使用分組對象管理器:

(1) 被管理的每個對象都有唯一的 ID

(2) 被管理的對象可以依據某個標志進行分組。

(3) 經常需要根據分組標志來查詢符合該標志的對象列表。

(4) 經常需要向管理器中增加 / 移除被分組的對象。

(5) 經常需要根據對象 ID 快速查找對應的對象。

3 .設計思想與實現

IGroupingObjectManager 的接口定義如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public interface IGroupingObjectManager < TGroupKey,TObjectKey,TObject > where TObject: IGroupingObject < TGroupKey,TObjectKey >
{
/// <summary>
/// Add如果已經存在同ID的對象,則用新對象替換舊對象。
/// </summary>
void Add(TObjectobj);

void Remove(TObjectKeyobjectID);

/// <summary>
/// Clear清除所有對象與分組。
/// </summary>
void Clear();

TObjectGet(TObjectKeyobjectID);

int TotalObjectCount{ get ;}

/// <summary>
/// GetCountOfGroup獲取某個分組中的對象的個數。
/// </summary>
int GetCountOfGroup(TGroupKeygroupID);

/// <summary>
/// GetAllObjectsCopy獲取管理器中的所有對象列表。
/// </summary>
IList < TObject > GetAllObjectsCopy();

/// <summary>
/// GetGroupsCopy獲取所有的分組標志列表。
/// </summary>
IList < TGroupKey > GetGroupsCopy();

/// <summary>
/// GetObjectsCopy獲取某個分組中的所有對象的列表。
/// </summary>
IList < TObject > GetObjectsCopy(TGroupKeygroupID);
}

這個接口包含有三個泛型參數: TGroupKey TObjectKey TObject

TObject 是被管理的對象的類型。

TObjectKey 是被管理的對象的 ID 的類型。

TGroupKey 是對被管理的對象進行分組的標志的類型。

另外,該接口的泛型參數還有一個約束,即 TObject 必須從 IGroupingObject 接口繼承,以表明自己是一個可以被分組的對象。

IGroupingObject 接口很簡單,其定義如下:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> public interface IGroupingObject < TGroupKey,TObjectKey >
{
TObjectKeyID{
get ;}
TGroupKeyGroupID{
get ;}
}

觀察這個接口告訴我們,只要一個對象有唯一的 ID ,并且有分組的標志,那么這個對象就可以被對象分組管理器進行管理了。

關于 GroupingObjectManager 的實現要注意以下幾點:

(1) GroupingObjectManager 使用了兩個字典集合: objectDictionary groupDictionary objectDictionary 用于存儲所有被管理的對象。 groupDictionary 用于管理所有的分組,而且 groupDictionary Value 又是另外一個字典,用于存儲屬于這一分組的所有對象。

(2) GroupingObjectManager 的實現是線程安全的,所以可以在多線程的環境中使用。我們對其內部的兩個字典集合都進行了加鎖控制。

(3) Add 方法采用的也是覆蓋原則――如果同 Key 的對象已經存在,則用新對象覆蓋舊的對象。

4. 使用時的注意事項

當調用 Remove 方法刪除的是某個分組中的最后一個對象時,在該對象被刪除后,對應的分組將也會被刪除。所以,管理器中不會存在“空”的歷史分組。也就是說, GetGroupsCopy 方法返回的分組標志列表中的每個分組標志在管理器中對應的分組都包含至少一個被分組對象。

5. 擴展

分組對象管理器 IGroupingObjectManager 暫時沒有任何擴展。

注:ESBasic源碼可到 http://esbasic.codeplex.com/ 下載。
ESBasic討論:37677395
ESBasic開源前言

ESBasic 可復用的.NET類庫(13) -- 分組對象管理器 IGroupingObjectManager


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 92午夜剧场 | 国产综合视频 | 天天天天天天天操 | 欧美福利一区二区三区 | 成人免费影 | 亚洲精品成A人在线观看拍拍拍 | 美女在线视频网站 | 国产精品亚欧美一区二区三区 | 国产毛片久久精品 | 欧美一区二区三区网站 | 国内精品易阳在线播放国产 | 欧美精品18 | 亚州第一视频 | 国产一极毛片 | 青青热在线观看视频精品 | 且试天下修久容 | 丝袜 亚洲 另类 欧美 综合 | 国产精品久久久久久久久免费 | jizz日本女人| 国产成人av免费观看 | 黄色片快播 | 国产成人啪精品视频免费网站软件 | 麻豆国产精品 | 亚洲综合亚洲国产尤物 | 在线视频 中文字幕 | 日韩欧美一区二区三区四区 | 日韩欧美一区二区三区 | 青青草免费观看完整版高清 | 久久久免费的精品 | 国产精品片aa在线观看 | aaa一级毛片免费 | 我要看欧美一级毛片 | 日本AAA片爽快视频 波多在线 | 欧美一级二级在线观看 | 久久久久国产精品一区 | 中国明星一级毛片免费 | 久久综合色婷婷 | 欧美精品二区 | 国产精品极品美女自在线看免费一区二区 | 欧美激情一区二区三级高清视频 | 国产亚洲欧美视频 |