欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 一级毛片免费在线播放 | 国产精品三级a三级三级午夜 | 欧美久久久久久 | 久久国产免费 | A片好大好紧好爽视频 | 黄色国产视频 | 男人阁久久 | 看中国毛片| 亚洲国产成人精品女人久久久 | 国产成人黄网在线免 | 国产成人精品日本亚洲11 | 一区二区三区亚洲 | 国产毛片欧美毛片久久久 | 欧美日本一道本 | 欧美影院推理片免费看 | 久久精品桃花综合 | 成人黄色网战 | 日本高清久久 | 青青免费视频精品一区二区 | 亚欧精品一区二区三区四区 | 国产精品国产成人国产三级 | 国产成人在线视频 | 国产一级毛片视频 | JLZZJLZZ日本人护士水好多 | av激情在线| 中国一级特黄真人毛片免费看 | 精品久久成人免费第三区 | 黄色电影在线免费观看 | 九热| 亚洲国产日韩欧美综合久久 | 国内精品免费视频 | 中文字幕免费在线观看动作大片 | 国产91在线免费 | 色站综合| 99热这里只有免费国产精品 | 久久久国产一级片 | 秦浩最新电视剧 | 免费福利在线观看 | 欧洲免费在线视频 | 国产精品视频久久久 | 日韩不卡在线 |