|
|
Опубліковано 10.04.2015 17:22:50
|
|
|

IDictionary є базовим інтерфейсом для загальної колекції пар ключ/значення, кожна з яких є парою ключ-значення в об'єкті keyValuePair.
Кожна пара повинна мати унікальний ключ. Реалізація відрізняється тим, чи дозволяє ключ бути порожнім посиланням (нічого в Visual Basic). Це значення може бути порожнім посиланням (Nothing у Visual Basic) і не обов'язково має бути унікальним. Інтерфейс IDictionary дозволяє перелічувати ключі та значення, які він містить, але це не означає конкретного порядку сортування.
Оператор foreach у мові C# (For Each у Visual Basic і для кожного в C++) вимагає типу кожного елемента колекції. Оскільки кожен елемент IDictionary є парою ключ/значення, тип елемента не є ні типом ключа, ні типом значення. Натомість це тип KeyValuePair.
Ось простий приклад програми
Клас сутності:
Домен простору назв
{
//订单 Орден громадського класу { public int OrderID { get; декорація; }
/// <summary> Дата замовлення /// </summary> public DateTime OrderDate { get; декорація; }
/// <summary> Адреса замовлення /// </summary> public string OrderAaddress { get; декорація; }
/// <summary> Замовити телефон /// </summary> public string OrderTel { get; декорація; } }
}
//订单明细
Домен простору назв
{ Порядок громадського класу Деталі { public int DetailID { get; декорація; }
public int ProductID { get; декорація; }
/// <summary> Кількість /// </summary> public decimal Quantity { get; декорація; }
/// <summary> Ціна одиниці /// </summary> публічна десяткова ціна { get; декорація; } }
}
//存放数据
використовуючи System; з використанням System.Collections.Generic; використовуючи System.Linq; використовуючи System.Text; використовуючи Domain;
Сервіс простору назв
{ публічний статичний клас OrderStock { приватний статичний IList<Order> m_orderList = новий List<Order>(); Визначимо загальне поле для списку
публічний статичний<Order> IList OrderList// визначає загальну властивість List { Іди { повернення m_orderList; } сет { m_orderList = значення; } }
приватний статичний ідентифікатор<порядок, IList<OrderDetail>> m_orders = новий словник<порядок, IList<OrderDetail>>();
//定义了一个Dictionary的泛型字段,
public static IDictionary<Order, IList<OrderDetail>> Orders/ визначає загальну властивість словника { Іди { повернення m_orders; } сет { m_orders = значення; } } }
}
Інтерфейси сервісів
використовуючи System; використовуючи Domain; Сервіс простору назв
{ публічний інтерфейс IOrderService {
//删除 void Delete(сутність Domain.Order);
Запит до всіх System.Collections.Generic.IList<Domain.Order> LoadAll();
//保存 об'єкт Save(сутність Domain.Order);
//更新 void Update (сутність Domain.Order);
Запит за ID Order Get(object id);
//获取下一个ID об'єкт GetNextID(); }
Сервіс простору назв
{ публічний інтерфейс IOrderDetailService { void Delete(System.Collections.Generric.KeyValuePair<Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail>> сутність); System.Collections.Generric.KeyValuePair<Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail>> Get(ідентифікатор об'єкта); об'єкт GetNextDetailID(object mainID); об'єкт GetNextID(); System.Collections.Generic.IDictionary<Domain.Order, System.Collections.Generic.IList<Domain.OrderDetail>> LoadAll(); object Save(сутність Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail> деталь); оновлення порожнечі (System.Collections.Generric.KeyValuePair<Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail>> сутність); }
}
Реалізація служби
використовуючи System; з використанням System.Collections.Generic; використовуючи System.Linq; використовуючи System.Text; використовуючи Domain;
Сервіс простору назв
{ публічний клас OrderService : IOrderService { <Order> публічний IList LoadAll() { var list = OrderStock.OrderList;
список повернення; }
публічний об'єкт GetNextID() { int id = 1; якщо (OrderStock.OrderList.Count > 0) { id = OrderStock.OrderList.Max(m => m.OrderID) + 1; } Повернення ідентифікатора; }
Збереження публічного об'єкта (сутність порядку) { OrderStock.OrderList.Add(сутність);
сутність повернення. OrderID; }
Оновлення публічної недійсності (сутність порядку) { var list = OrderStock.OrderList.Where(w => w.OrderID == сутність. OrderID);
якщо (список. Count<Order>() > 0) { Порядок порядку = список. По-перше(); OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = сутність; } }
Публічний порядок Get(ідентифікатор об'єкта) { Порядкова сутність = нуль; var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id); якщо (список. Count<Order>() > 0) { Порядок порядку = список. По-перше(); сутність = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)]; } сутність повернення; }
public void Видалити (сутність порядку) { var list = OrderStock.OrderList.Where(w => w.OrderID == сутність. OrderID); якщо (список. Count<Order>() > 0) { Порядок порядку = список. По-перше(); OrderStock.OrderList.Remove(замовлення); } } }
}
використовуючи System; з використанням System.Collections.Generic; використовуючи System.Linq; використовуючи System.Text; використовуючи Domain;
Сервіс простору назв
{ публічний клас OrderDetailService : IOrderDetailService { public IDictionary<Order, IList<OrderDetail>> LoadAll() { var dic = OrderStock.Orders;
Повернення ДІК; }
публічний об'єкт GetNextID() { int id = 1; якщо (OrderStock.Orders.Count > 0) { id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1; } Повернення ідентифікатора; }
public object GetNextDetailID(object mainID) { int id = 1; var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)mainID); якщо (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0) { var item = dic.First(); var list = предмет. Value.Where(w => w.DetailID == (int)mainID); якщо (список. Count<OrderDetail>() > 0) { id = список. По-перше(). DetailID + 1; } } Повернення ідентифікатора; }
Збереження публічного об'єкта (сутність порядку,<OrderDetail> деталі IList) { результат об'єкта = null; якщо (! OrderStock.Orders.ContainsKey(сутність)) { OrderStock.Orders.Add(сутність, деталь); результат = сутність. OrderID; } результат повернення; }
Оновлення публічної порожнечі (KeyValuePair<Order, <OrderDetail>IList> сутність) { якщо (OrderStock.Orders.ContainsKey(entity. Ключ)) { OrderStock.Orders[entity. Ключ] = сутність. Цінність; } }
public KeyValuePair<Order, IList<OrderDetail>> Get(object id) {
KeyValuePair<Order, IList<OrderDetail>> сутність = новий KeyValuePair<Order, IList<OrderDetail>>(); var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id); якщо (dic.Count<KeyValuePair<Order, IList<OrderDetail>>>() > 0) { сутність = dic.First(); }
сутність повернення; }
public void Delete(KeyValuePair<Order, <OrderDetail>IList> сутність) { якщо (OrderStock.Orders.ContainsKey(entity. Ключ)) { OrderStock.Orders.Redelete(сутність. Key); } } }
}
Тест
використовуючи System; з використанням System.Collections.Generic; використовуючи System.Linq; використовуючи System.Text; використання NUnit.Framework; використання сервісу; використовуючи Domain;
Простор назв ServiceTest
{ [Тестовий пристрій] публічний клас OrderServiceTest { приватний IOrderService m_service;
[SetUp] публічна порожнеча: Init() { m_service = новий OrderService(); }
[Тест] public void LoadAllTest() { VAR List= m_service. LoadAll(); Foreach (елемент VAR у списку) { Console.WriteLine(елемент). OrderID); Console.WriteLine(елемент). Адреса замовлення); Console.WriteLine(елемент). OrderDate); Console.WriteLine(елемент). OrderTel); } Assert.IsNotNull(список); }
[Тест] публічна порожнеча Збереження() { Сутність замовлення = новий Order() { OrderID = (int)m_service. GetNextID(), OrderDate = DateTime.Now.AddDays(-1), OrderAaddress = "Urumqi", OrderTel = "123123" }; об'єкт obj = m_service. Save(сутність);
Assert.IsNotNull(obj); }
[Тест] Оновлення публічної порожнечі() { Порядок сутності = m_service. Get(1); сутність. OrderAaddress = «Корла»; m_service. Оновлення (сутність); }
[Тест] public void Видалити() { Порядок сутності = m_service. Get(1); сутність. OrderAaddress = «Корла»; m_service. Видалити (сутність); } }
}
використовуючи System; з використанням System.Collections.Generic; використовуючи System.Linq; використовуючи System.Text; використання NUnit.Framework; використання сервісу; використовуючи Domain;
Простор назв ServiceTest
{ [Тестовий пристрій] публічний клас OrderServiceDetailTest { приватний IOrderDetailService m_service;
[SetUp] публічна порожнеча: Init() { m_service = новий OrderDetailService(); }
[Тест] public void LoadAllTest() { VAR List= m_service. LoadAll(); Foreach (елемент VAR у списку) { Console.WriteLine("-------------- Order ----------"); Console.WriteLine(елемент). Key.OrderID); Console.WriteLine(елемент). Key.OrderAaddress); Console.WriteLine(елемент). Key.OrderDate); Console.WriteLine(елемент). Key.OrderTel); Console.WriteLine("-------------- Order Detail ----------"); foreach (var li in item. Цінність) { Console.WriteLine(li.DetailID); Console.WriteLine (li.Price); Console.WriteLine(li.Quantity); Console.WriteLine(li.ProductID); } } Assert.IsNotNull(список); }
[Тест] публічна порожнеча Збереження() { int id = (int)m_service. GetNextID(); Сутність замовлення = новий Order() { OrderID = id, OrderDate = DateTime.Now.AddDays(-1), OrderAaddress = "Urumqi", OrderTel = "123123" }; <OrderDetail> IList list = новий List<OrderDetail>(); для (int i = 0; I < 3; i++) { Список. Add(new OrderDetail() { DetailID = i + 1, Ціна=10+i, Quantity=i+100, ProductID = 1000 + i }); } об'єкт obj = m_service. Save(сутність, список);
Assert.IsNotNull(obj); }
[Тест] Оновлення публічної порожнечі() { var сутність = m_service. Get(1);
сутність. Value[0] = новий OrderDetail() { ProductID = 1000, DetailID = 1, Ціна = 13,34 млн, Кількість = 200,1М }; m_service. Оновлення (сутність); }
[Тест] public void Видалити() { var сутність = m_service. Get(1); m_service. Видалити (сутність); } }
}
Примітка: під час тестування потрібно посилатися на інструмент nunit.framework |
Попередній:Діліться двома інструментами CC-атак, добре підходить для стрес-тестуванняНаступний:Бі Фуцзянь опублікував вибачення у Weibo: Я почуваюся дуже винним і сумним
|