IDictionaryは、keyValuePairオブジェクト内のキー-値ペアの汎用的な集合の基本インターフェースです。
各ペアは固有の鍵を持つ必要があります。 実装はキーを空参照(Visual BasicではNothing)にするかどうかで異なります。 この値は空の参照(Visual Basicでは何もない)でも構いませんし、一意である必要はありません。 IDictionaryインターフェースは、含まれるキーや値の列挙を可能にしますが、特定のソート順序を意味しません。
C#言語のforeach文(Visual BasicではFor Eeach、C++ではfor each)は、コレクション内の各要素の型を必要とします。 IDictionaryの各要素はキー/値のペアであるため、要素タイプはキーの型でも値の型でもありません。 代わりにKeyValuePair型です。
ここに簡単な例プログラムがあります
エンティティクラス:
名前空間ドメイン
{
//订单 公共階級勲章 { public int OrderID { get; セット; }
/// <summary> 発注日 /// </summary> public DateTime OrderDate { get; セット; }
/// <summary> 注文住所 /// </summary> public string OrderAdress { get; セット; }
/// <summary> 注文電話 /// </summary> public string OrderTel { get; セット; } }
}
//订单明细
名前空間ドメイン
{ パブリッククラス OrderDetail { public int DetailID { get; セット; }
public int ProductID { get; セット; }
/// <summary> 数量 /// </summary> 公開十進法 Quantity { get; セット; }
/// <summary> 単価 /// </summary> 公開小数点 価格 { get; セット; } }
}
//存放数据
Systemを使い、 System.Collections.Genericを使い、 System.Linqを使い、 System.Textを使い、 ドメインを使い、
ネームスペース サービス
{ 公共静的クラス OrderStock { private static IList<Order> m_orderList = 新しいリスト<Order>(); リストのジェネリックフィールドを定義します
公開の静的IList<Order> OrderList//はリストの一般的なプロパティを定義します { 取得 { 返m_orderList; } セット { m_orderList = 価値; } }
private static IDictionary<Order, IList<OrderDetail>> m_orders = 新しい辞書<Order, IList<OrderDetail>>();
//定义了一个Dictionary的泛型字段,
公開静的IDictionary<Order、IList<OrderDetail>>Orders/は辞書の一般的な性質を定義します { 取得 { m_orders返す; } セット { m_orders = 価値; } } }
}
サービスインターフェース
Systemを使い、 ドメインを使い、 ネームスペース サービス
{ パブリックインターフェース IOrderService {
//删除 void Delete(Domain.Order entity);
全てクエリ System.Collections.Generic.IList<Domain.Order> LoadAll();
//保存 オブジェクト Save(Domain.Order entity);
//更新 void Update(Domain.Orderエンティティ);
IDによるクエリ Order Get(オブジェクトID);
//获取下一个ID オブジェクト GetNextID(); }
ネームスペース サービス
{ パブリックインターフェース IOrderDetailService { void Delete(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>>entity); System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> Get(オブジェクトID); object GetNextDetailID(object mainID); オブジェクト GetNextID(); System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> LoadAll(); object Save(Domain.Order entity, System.Collections.Generic.IList<Domain.OrderDetail> detail); void Update(System.Collections.Generic.KeyValuePair<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>>entity); }
}
サービス実現
Systemを使い、 System.Collections.Genericを使い、 System.Linqを使い、 System.Textを使い、 ドメインを使い、
ネームスペース サービス
{ 公共クラス 命令サービス:IOrderService { public IList<Order> LoadAll() { var list = OrderStock.OrderList;
リターンリスト; }
パブリックオブジェクト GetNextID() { int id = 1; もし(OrderStock.OrderList.Count > 0) { id = OrderStock.OrderList.Max(m => m.OrderID) + 1; } 返却ID; }
パブリックオブジェクト Save(Order entity) { OrderStock.OrderList.Add(法人);
リターンエンティティ。 OrderID; }
パブリック・ヴォイド 更新(オーダーエンティティ) { var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);
もし(リスト)。 カウント<Order>() > 0) { 順序=リスト。 ファースト(); OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = エンティティ; } }
パブリックオーダー Get(オブジェクトID) { 順序エンティティ = null; var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id); もし(リスト)。 カウント<Order>() > 0) { 順序=リスト。 ファースト(); entity = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)]; } リターンエンティティ; }
パブリック・ヴォイド 削除(オーダー・エンティティ) { var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID); もし(リスト)。 カウント<Order>() > 0) { 順序=リスト。 ファースト(); OrderStock.OrderList.Remove(注文); } } }
}
Systemを使い、 System.Collections.Genericを使い、 System.Linqを使い、 System.Textを使い、 ドメインを使い、
ネームスペース サービス
{ 公共クラス OrderDetailService : IOrderDetailService { public IDictionary<Order, IList<OrderDetail>>LoadAll() { var dic = OrderStock.Orders;
返却 dic; }
パブリックオブジェクト GetNextID() { int id = 1; もし(OrderStock.Orders.Count 0> 0) { id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1; } 返却ID; }
public object GetNextDetailID(object mainID) { int id = 1; var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)mainID); if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0) { var item = dic。First(); VAR リスト = アイテム。 Value.Where(w => w.DetailID == (int)mainID); もし(リスト)。 カウント<OrderDetail>() > 0) { id = リスト。 First()。 DetailID + 1; } } 返却ID; }
パブリックオブジェクト Save(Order entity, ilist<OrderDetail>詳細) { オブジェクト結果 = null; もし(! OrderStock.Orders.ContainsKey(エンティティ)) { OrderStock.Orders.Add(エンティティ、詳細); 結果=エンティティ。 OrderID; } リターン結果; }
public void Update(KeyValuePair<Order, IList<OrderDetail>> entity) { もし(OrderStock.Orders.ContainsKey(entity. 注)) { OrderStock.Orders[entity. キー] = エンティティ。 価値; } }
public KeyValuePair<Order, IList<OrderDetail>> Get(object id) {
KeyValuePair<Order, IList<OrderDetail>>entity = new KeyValuePair<Order, IList<OrderDetail>>(); var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id); if (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0) { entity = dic。First(); }
リターンエンティティ; }
public void Delete(KeyValuePair<Order, IList<OrderDetail>> entity) { もし(OrderStock.Orders.ContainsKey(entity. 注)) { OrderStock.Orders.Remove(entity. キー); } } }
}
試験
Systemを使い、 System.Collections.Genericを使い、 System.Linqを使い、 System.Textを使い、 NUnit.Frameworkを使い、 サービスを利用すること; ドメインを使い、
名前空間ServiceTest
{ [テストフィクスチャー] パブリッククラス OrderServiceTest { 民間IOrderService m_service;
[セットアップ] パブリック・ヴォイド Init() { m_service = 新しいOrderService(); }
[テスト] パブリック・ヴォイド LoadAllTest() { var list=m_service。 LoadAll(); foreach(リスト内のvar項目) { Console.WriteLine(item. OrderID); Console.WriteLine(item. OrderAaddress); Console.WriteLine(item. OrderDate); Console.WriteLine(item. OrderTel); } Assert.IsNotNull(list); }
[テスト] パブリック・ヴォイド セーブ() { オーダーエンティティ = 新しいオーダー() { OrderID = (int)m_service。 GetNextID(), OrderDate = DateTime.Now.AddDays(-1), OrderAaddress = 「ウルムチ」、 OrderTel = "123123" }; オブジェクト obj = m_service。 Save(エンティティ);
Assert.IsNotNull(obj); }
[テスト] パブリック・ヴォイドアップデート() { オーダーエンティティ = m_service。 Get(1); 存在。 OrderAaddress = 「コルラ」; m_service。 Update(エンティティ); }
[テスト] パブリック・ヴォイド Delete() { オーダーエンティティ = m_service。 Get(1); 存在。 OrderAaddress = 「コルラ」; m_service。 Delete(エンティティ); } }
}
Systemを使い、 System.Collections.Genericを使い、 System.Linqを使い、 System.Textを使い、 NUnit.Frameworkを使い、 サービスを利用すること; ドメインを使い、
名前空間ServiceTest
{ [テストフィクスチャー] public class OrderServiceDetailTest { 民間のIOrderDetailService m_service;
[セットアップ] パブリック・ヴォイド Init() { m_service = 新しいOrderDetailService(); }
[テスト] パブリック・ヴォイド LoadAllTest() { var list=m_service。 LoadAll(); foreach(リスト内のvar項目) { Console.WriteLine("命令------------------------"); Console.WriteLine(item. Key.OrderID); Console.WriteLine(item. キー.オーダーアドレス); Console.WriteLine(item. キー・オーダー・デート); Console.WriteLine(item. Key.OrderTel); Console.WriteLine("-------------- Order Detail ----------"); foreach(var li in item. 価値) { Console.WriteLine(li.DetailID); コンソール.WriteLine(li.Price); コンソール.WriteLine(li.Quantity); Console.WriteLine(li.ProductID); } } Assert.IsNotNull(list); }
[テスト] パブリック・ヴォイド セーブ() { int ID = (int)m_service。 GetNextID(); オーダーエンティティ = 新しいオーダー() { OrderID = id、 OrderDate = DateTime.Now.AddDays(-1), OrderAaddress = 「ウルムチ」、 OrderTel = "123123" }; IList<OrderDetail>リスト=新しいリスト<OrderDetail>(); (int i = 0; 私は3<; i++) { リスト。 Add(new OrderDetail() { DetailID = i + 1, 価格=10+i、 量=i+100、 ProductID = 1000 + i }); } オブジェクト obj = m_service。 Save(entity, list);
Assert.IsNotNull(obj); }
[テスト] パブリック・ヴォイドアップデート() { VAR エンティティ = m_service。 Get(1);
存在。 Value[0] = 新しいOrderDetail() { ProductID = 1000, DetailID = 1, 価格 = 1334万、 数量 = 200.1M }; m_service。 Update(エンティティ); }
[テスト] パブリック・ヴォイド Delete() { VAR エンティティ = m_service。 Get(1); m_service。 Delete(エンティティ); } }
}
注意:テスト時にはnunit.frameworkツールを参照する必要があります |