|
|
Posted on 4/10/2015 5:22:50 PM
|
|
|

IDictionary is the base interface for a generic collection of key/value pairs, each of which is a key-value pair in the keyValuePair object.
Each pair must have a unique key. The implementation differs in whether or not to allow the key to be an empty reference (Nothing in Visual Basic). This value can be an empty reference (Nothing in Visual Basic) and doesn't have to be unique. The IDictionary interface allows for an enumeration of the keys and values it contains, but this does not imply any specific sort order.
The foreach statement in the C# language (For Each in Visual Basic and for each in C++) requires the type of each element in the collection. Since each element of IDictionary is a key/value pair, the element type is neither a type of a key nor a type of value. Instead, it's a KeyValuePair type.
Here is a simple example program
Entity class:
namespace Domain
{
//订单 public class Order { public int OrderID { get; set; }
/// <summary> Order date /// </summary> public DateTime OrderDate { get; set; }
/// <summary> Order address /// </summary> public string OrderAdress { get; set; }
/// <summary> Order phone /// </summary> public string OrderTel { get; set; } }
}
//订单明细
namespace Domain
{ public class OrderDetail { public int DetailID { get; set; }
public int ProductID { get; set; }
/// <summary> quantity /// </summary> public decimal Quantity { get; set; }
/// <summary> Unit price /// </summary> public decimal Price { get; set; } }
}
//存放数据
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Domain;
namespace Service
{ public static class OrderStock { private static IList<Order> m_orderList = new List<Order>(); Define a generic field for a List
public static IList<Order> OrderList// defines a generic property of a List { get { return m_orderList; } set { m_orderList = value; } }
private static IDictionary<Order, IList<OrderDetail>> m_orders = new Dictionary<Order, IList<OrderDetail>>();
//定义了一个Dictionary的泛型字段,
public static IDictionary<Order, IList<OrderDetail>> Orders/ defines a generic property of a dictionary { get { return m_orders; } set { m_orders = value; } } }
}
Service interfaces
using System; using Domain; namespace Service
{ public interface IOrderService {
//删除 void Delete(Domain.Order entity);
Query all System.Collections.Generic.IList<Domain.Order> LoadAll();
//保存 object Save(Domain.Order entity);
//更新 void Update(Domain.Order entity);
Query by ID Order Get(object id);
//获取下一个ID object GetNextID(); }
namespace Service
{ public interface 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(object id); object GetNextDetailID(object mainID); object 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); }
}
Service realization
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Domain;
namespace Service
{ public class OrderService : IOrderService { public IList<Order> LoadAll() { var list = OrderStock.OrderList;
return list; }
public object GetNextID() { int id = 1; if (OrderStock.OrderList.Count > 0) { id = OrderStock.OrderList.Max(m => m.OrderID) + 1; } return id; }
public object Save(Order entity) { OrderStock.OrderList.Add(entity);
return entity. OrderID; }
public void Update(Order entity) { var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);
if (list. Count<Order>() > 0) { Order order = list. First(); OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = entity; } }
public Order Get(object id) { Order entity = null; var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id); if (list. Count<Order>() > 0) { Order order = list. First(); entity = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)]; } return entity; }
public void Delete(Order entity) { var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID); if (list. Count<Order>() > 0) { Order order = list. First(); OrderStock.OrderList.Remove(order); } } }
}
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Domain;
namespace Service
{ public class OrderDetailService : IOrderDetailService { public IDictionary<Order, IList<OrderDetail>> LoadAll() { var dic = OrderStock.Orders;
return dic; }
public object GetNextID() { int id = 1; if (OrderStock.Orders.Count > 0) { id = OrderStock.Orders.Max(m => m.Key.OrderID) + 1; } return 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 list = item. Value.Where(w => w.DetailID == (int)mainID); if (list. Count<OrderDetail>() > 0) { id = list. First(). DetailID + 1; } } return id; }
public object Save(Order entity, IList<OrderDetail> detail) { object result = null; if (! OrderStock.Orders.ContainsKey(entity)) { OrderStock.Orders.Add(entity, detail); result = entity. OrderID; } return result; }
public void Update(KeyValuePair<Order, IList<OrderDetail>> entity) { if (OrderStock.Orders.ContainsKey(entity. Key)) { OrderStock.Orders[entity. Key] = entity. Value; } }
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(); }
return entity; }
public void Delete(KeyValuePair<Order, IList<OrderDetail>> entity) { if (OrderStock.Orders.ContainsKey(entity. Key)) { OrderStock.Orders.Remove(entity. Key); } } }
}
Test
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; using Service; using Domain;
namespace ServiceTest
{ [TestFixture] public class OrderServiceTest { private IOrderService m_service;
[SetUp] public void Init() { m_service = new OrderService(); }
[Test] public void LoadAllTest() { var list= m_service. LoadAll(); foreach (var item in list) { Console.WriteLine(item. OrderID); Console.WriteLine(item. OrderAdress); Console.WriteLine(item. OrderDate); Console.WriteLine(item. OrderTel); } Assert.IsNotNull(list); }
[Test] public void Save() { Order entity = new Order() { OrderID = (int)m_service. GetNextID(), OrderDate = DateTime.Now.AddDays(-1), OrderAdress = "Urumqi", OrderTel = "123123" }; object obj = m_service. Save(entity);
Assert.IsNotNull(obj); }
[Test] public void Update() { Order entity = m_service. Get(1); entity. OrderAdress = "Korla"; m_service. Update(entity); }
[Test] public void Delete() { Order entity = m_service. Get(1); entity. OrderAdress = "Korla"; m_service. Delete(entity); } }
}
using System; using System.Collections.Generic; using System.Linq; using System.Text; using NUnit.Framework; using Service; using Domain;
namespace ServiceTest
{ [TestFixture] public class OrderServiceDetailTest { private IOrderDetailService m_service;
[SetUp] public void Init() { m_service = new OrderDetailService(); }
[Test] public void LoadAllTest() { var list= m_service. LoadAll(); foreach (var item in list) { Console.WriteLine("-------------- Order ----------"); Console.WriteLine(item. Key.OrderID); Console.WriteLine(item. Key.OrderAdress); Console.WriteLine(item. Key.OrderDate); Console.WriteLine(item. Key.OrderTel); Console.WriteLine("-------------- Order Detail ----------"); foreach (var li in item. Value) { Console.WriteLine(li.DetailID); Console.WriteLine(li.Price); Console.WriteLine(li.Quantity); Console.WriteLine(li.ProductID); } } Assert.IsNotNull(list); }
[Test] public void Save() { int id = (int)m_service. GetNextID(); Order entity = new Order() { OrderID = id, OrderDate = DateTime.Now.AddDays(-1), OrderAdress = "Urumqi", OrderTel = "123123" }; IList<OrderDetail> list = new List<OrderDetail>(); for (int i = 0; i < 3; i++) { list. Add(new OrderDetail() { DetailID = i + 1, Price=10+i, Quantity=i+100, ProductID = 1000 + i }); } object obj = m_service. Save(entity, list);
Assert.IsNotNull(obj); }
[Test] public void Update() { var entity = m_service. Get(1);
entity. Value[0] = new OrderDetail() { ProductID = 1000, DetailID = 1, Price = 13.34M, Quantity = 200.1M }; m_service. Update(entity); }
[Test] public void Delete() { var entity = m_service. Get(1); m_service. Delete(entity); } }
}
Note: You need to reference the nunit.framework tool when testing |
Previous:Share two CC attack tools, good for stress testingNext:Bi Fujian issued an apology letter on Weibo: I feel very guilty and sad
|