|
|
Опубликовано 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; с использованием домена;
Сервис пространства имён
{ публичный статический класс OrderStock { приватный статический IList<Order> m_orderList = новый List<Order>(); Определим общее поле для списка
публичный статический<Order> IList OrderList// определяет общее свойство списка { Получить { возвращение m_orderList; } Набор { m_orderList = значение; } }
private static IDictionary<Order, IList<OrderDetail>> m_orders = новый словарь<порядок, IList<OrderDetail>>();
//定义了一个Dictionary的泛型字段,
public static IDictionary<Order, IList<OrderDetail>> Orders/ определяет общее свойство словаря { Получить { возвращение m_orders; } Набор { m_orders = значение; } } }
}
Интерфейсы сервисов
используя System; с использованием домена; Сервис пространства имён
{ публичный интерфейс IOrderService {
//删除 void Delete(сущность Domain.Order);
Запросить все System.Collections.Genereric.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.Genereric.IList<Domain.OrderDetail>> LoadAll(); object Save(сущность Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail> детали); void update(System.Collections.Generric.KeyValuePair<Domain.Order, System.Collections.Generric.IList<Domain.OrderDetail>> сущность); }
}
Реализация сервиса
используя System; с использованием System.Collections.Generic; с использованием System.Linq; с использованием System.Text; с использованием домена;
Сервис пространства имён
{ публичный класс OrderService : IOrderService { <Order> публичный IList LoadAll() { var list = OrderStock.OrderList;
список возвратов; }
публичный объект GetNextID() { int id = 1; if (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) { Порядок порядка = список. Во-первых(); entity = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)]; } сущность возврата; }
public void Delete (Сущность порядка) { var list = OrderStock.OrderList.Where(w => w.OrderID == сущность. OrderID); если (список. Count<Order>() > 0) { Порядок порядка = список. Во-первых(); OrderStock.OrderList.Remove(order); } } }
}
используя System; с использованием System.Collections.Generic; с использованием System.Linq; с использованием System.Text; с использованием домена;
Сервис пространства имён
{ публичный класс OrderDetailService : IOrderDetailService { Public IDictionary<Order, IList<OrderDetail>> LoadAll() { var dic = OrderStock.Orders;
Return dic; }
публичный объект GetNextID() { int id = 1; если (OrderStock.Orders.Count > 0) { id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1; } идентификатор возврата; }
публичный объект 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) { object result = 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(сущность. Ключ); } } }
}
Тест
используя System; с использованием System.Collections.Generic; с использованием System.Linq; с использованием System.Text; с использованием NUnit.Framework; использование сервиса; с использованием домена;
пространство имён ServiceTest
{ [Тестовый прибор] публичный класс OrderServiceTest { частный IOrderService m_service;
[Настройка] Публичная пустота 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(list); }
[Тест] Сохранение публичной пустоты() { Сущность порядка = новый Order() { OrderID = (int)m_service. GetNextID(), OrderDate = DateTime.Now.AddDays(-1), OrderAaddress = «Урумчи», OrderTel = "123123" }; объект obj = m_service. Сохранить (сущность);
Assert.IsNotNull(obj); }
[Тест] Обновление публичной пустоты() { Сущность порядка = m_service. Get(1); сущность. OrderAaddress = «Корла»; m_service. Обновление (сущность); }
[Тест] public void Delete() { Сущность порядка = m_service. Get(1); сущность. OrderAaddress = «Корла»; m_service. Удалить (сущность); } }
}
используя System; с использованием System.Collections.Generic; с использованием System.Linq; с использованием System.Text; с использованием NUnit.Framework; использование сервиса; с использованием домена;
пространство имён ServiceTest
{ [Тестовый прибор] публичный класс OrderServiceDetailTest { частный IOrderDetailService m_service;
[Настройка] Публичная пустота 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(list); }
[Тест] Сохранение публичной пустоты() { int id = (int)m_service. GetNextID(); Сущность порядка = новый Order() { OrderID = id, OrderDate = DateTime.Now.AddDays(-1), OrderAaddress = «Урумчи», 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. Сохранить (сущность, список);
Assert.IsNotNull(obj); }
[Тест] Обновление публичной пустоты() { var сущность = m_service. Get(1);
сущность. Value[0] = новый OrderDetail() { ProductID = 1000, DetailID = 1, Цена = 13,34 млн, Количество = 200,1 млн }; m_service. Обновление (сущность); }
[Тест] public void Delete() { var сущность = m_service. Get(1); m_service. Удалить (сущность); } }
}
Примечание: при тестировании нужно обращаться к инструменту nunit.framework |
Предыдущий:Используйте два инструмента CC-атак, хорошие для стресс-тестированияСледующий:Би Фуцзянь опубликовал письмо с извинениями на Weibo: Я чувствую себя очень виноватым и грустным
|