|
|
Postitatud 10.04.2015 17:22:50
|
|
|

IDictionary on baasliides üldisele võtme/väärtuse paaride kogumile, millest igaüks on võtme-väärtuse paar keyValuePair objektis.
Igal paaril peab olema ainulaadne võti. Rakendus erineb selles, kas lubada võtmel olla tühi viide (Visual Basicus pole midagi). See väärtus võib olla tühi viide (Visual Basicus pole midagi) ja ei pea olema unikaalne. IDictionary liides võimaldab loendada seal sisalduvaid võtmeid ja väärtusi, kuid see ei tähenda kindlat sorteerimisjärjekorda.
C# keeles foreach lause (For Each in Visual Basicus ja Each for each in C++) nõuab iga elemendi tüüpi kogus. Kuna iga IDictionary element on võtme/väärtuse paar, ei ole elemenditüüp ei võtme tüüp ega väärtuse tüüp. Selle asemel on see KeyValuePair tüüp.
Siin on lihtne näidisprogramm
Üksuse klass:
Nimeruumi domeen
{
//订单 avaliku klassi kord { public int OrderID { get; seatud; }
/// <summary> Tellimuse kuupäev /// </summary> public DateTime OrderDate { get; seatud; }
/// <summary> Tellimuse aadress /// </summary> public string OrderAdress { get; seatud; }
/// <summary> Telli telefon /// </summary> public string OrderTel { get; seatud; } }
}
//订单明细
Nimeruumi domeen
{ avaliku klassi OrderDetail { public int DetailID { get; seatud; }
public int ProductID { get; seatud; }
/// <summary> Kogus /// </summary> avalik kümnendkomaa Kogus { get; seatud; }
/// <summary> Ühiku hind /// </summary> avalik kümnendkoht Hind { saa; seatud; } }
}
//存放数据
kasutades süsteemi; kasutades System.Collections.Generic; kasutades System.Linq'i; kasutades System.Texti; kasutades Domaini;
nimeruumi teenus
{ avalik staatiline klass OrderStock { privaatne staatiline<Order> IList m_orderList = uus List<Order>(); Määratle üldine väli loendi jaoks
avalik staatiline IList<Order> OrderList// määratleb nimekirja üldise omaduse { Mine { Tagasi m_orderList; } Komplekt { m_orderList = väärtus; } }
privaatne staatiline IDictionary<Order, <OrderDetail>IList> m_orders = uus Sõnastik<Kord, <OrderDetail>IList>();
//定义了一个Dictionary的泛型字段,
avalik staatiline IDictionary<Order, <OrderDetail>IList> Orders/ määratleb sõnastiku üldise omaduse { Mine { Tagasi m_orders; } Komplekt { m_orders = väärtus; } } }
}
Teenuseliidesed
kasutades süsteemi; kasutades Domaini; nimeruumi teenus
{ avaliku liidese IOrderService {
//删除 void Delete(Domain.Order entity);
Küsi kõiki System.Collections.Generic.IList<Domain.Order> LoadAll();
//保存 objekt Save(Domain.Order entity);
//更新 void Update(Domain.Order entity);
Päring ID järgi Order Get(objekti ID);
//获取下一个ID objekt GetNextID(); }
nimeruumi teenus
{ avalik liides 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); objekt 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); }
}
Teenuse realiseerimine
kasutades süsteemi; kasutades System.Collections.Generic; kasutades System.Linq'i; kasutades System.Texti; kasutades Domaini;
nimeruumi teenus
{ avalik klass Tellimusteenistus : IOrderService { avalik IList<Order> LoadAll() { var list = OrderStock.OrderList;
tagastusnimekiri; }
public object GetNextID() { int id = 1; if (OrderStock.OrderList.Count > 0) { id = OrderStock.OrderList.Max(m => m.OrderID) + 1; } tagastuse ID; }
avalik objekt Salvesta (Tellimusüksus) { OrderStock.OrderList.Add(entity);
Tagasi olend. OrderID; }
public void Uuendus (Order entity) { var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID);
if (list. Loend<Order>() > 0) { Järjekord = nimekiri. Esiteks(); OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)] = üksus; } }
Avaliku korra saamine (objekti ID) { Tellimuse üksus = null; var list = OrderStock.OrderList.Where(w => w.OrderID == (int)id); if (list. Loend<Order>() > 0) { Järjekord = nimekiri. Esiteks(); entity = OrderStock.OrderList[OrderStock.OrderList.IndexOf(order)]; } tagasipöördumise entiteedile; }
public void Delete (Order entity) { var list = OrderStock.OrderList.Where(w => w.OrderID == entity. OrderID); if (list. Loend<Order>() > 0) { Järjekord = nimekiri. Esiteks(); OrderStock.OrderList.Remove(order); } } }
}
kasutades süsteemi; kasutades System.Collections.Generic; kasutades System.Linq'i; kasutades System.Texti; kasutades Domaini;
nimeruumi teenus
{ avalik klass OrderDetailService : IOrderDetailService { avalik IDictionary<Order, <OrderDetail>IList> 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; } tagastuse 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, <OrderDetail>IList>>() > 0) { var item = dic.First(); var list = üksus. Value.Where(w => w.DetailID == (int)mainID); if (list. Loend<OrderDetail>() > 0) { id = nimekiri. Esiteks(). DetailID + 1; } } tagastuse ID; }
avalik objekt Salvesta (Order entity, IList<OrderDetail> detail) { objekti tulemus = null; kui (! OrderStock.Orders.ContainsKey(entity)) { OrderStock.Orders.Add(üksus, detail); tulemus = üksus. OrderID; } tagastustulemus; }
public void Update(KeyValuePair<Order, <OrderDetail>IList> entity) { if (OrderStock.Orders.ContainsKey(entity. Võti)) { OrderStock.Orders[entity. Võti] = olend. Väärtus; } }
public KeyValuePair<Order, <OrderDetail>IList> Get(object id) {
KeyValuePair<Order, <OrderDetail>IList> entity = uus KeyValuePair<Order, <OrderDetail>IList>(); var dic = OrderStock.Orders.Where(w => w.Key.OrderID == (int)id); if (dic.Count<KeyValuePair<Order, <OrderDetail>IList>>() > 0) { entity = dic.First(); }
tagasipöördumise entiteedile; }
public void Delete(KeyValuePair<Order, <OrderDetail>IList> entity) { if (OrderStock.Orders.ContainsKey(entity. Võti)) { OrderStock.Orders.Remove(entity). Võti); } } }
}
Katse
kasutades süsteemi; kasutades System.Collections.Generic; kasutades System.Linq'i; kasutades System.Texti; kasutades NUnit.Frameworki; Teenuse kasutamine; kasutades Domaini;
Nimeruumi ServiceTest
{ [TestFixture] avaliku klassi OrderServiceTest { privaatne IOrderService m_service;
[Seadistamine] public void Init() { m_service = uus OrderService(); }
[Test] public void LoadAllTest() { var list= m_service. LoadAll(); foreach (VAR üksus nimekirjas) { Konsool.WriteLine(üksus. OrderID); Konsool.WriteLine(üksus. OrderAdress); Konsool.WriteLine(üksus. OrderDate); Konsool.WriteLine(üksus. OrderTel); } Assert.IsNotNull(list); }
[Test] public void Save() { Order entity = uus Order() { OrderID = (int)m_service. GetNextID(), OrderDate = DateTime.Now.AddDays(-1), OrderAdress = "Urumqi", OrderTel = "123123" }; objekt obj = m_service. Save(entity);
Assert.IsNotNull(obj); }
[Test] public void Uuendus() { Tellimusüksus = m_service. Get(1); entiteet. OrderAdress = "Korla"; m_service. Uuendus(entity); }
[Test] public void Delete() { Tellimusüksus = m_service. Get(1); entiteet. OrderAdress = "Korla"; m_service. Delete(entity); } }
}
kasutades süsteemi; kasutades System.Collections.Generic; kasutades System.Linq'i; kasutades System.Texti; kasutades NUnit.Frameworki; Teenuse kasutamine; kasutades Domaini;
Nimeruumi ServiceTest
{ [TestFixture] avaliku klassi OrderServiceDetailTest { privaatne IOrderDetailService m_service;
[Seadistamine] public void Init() { m_service = uus OrderDetailService(); }
[Test] public void LoadAllTest() { var list= m_service. LoadAll(); foreach (VAR üksus nimekirjas) { Console.WriteLine("-------------- Order ----------"); Konsool.WriteLine(üksus. Key.OrderID); Konsool.WriteLine(üksus. Key.OrderAdress); Konsool.WriteLine(üksus. Key.OrderDate); Konsool.WriteLine(üksus. Key.OrderTel); Console.WriteLine("-------------- tellimuse detailid ----------"); foreach (var li in item. Väärtus) { 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 = uus Order() { OrderID = id, OrderDate = DateTime.Now.AddDays(-1), OrderAdress = "Urumqi", OrderTel = "123123" }; IList<OrderDetail> list = uus List<OrderDetail>(); for (int i = 0; I < 3; i++) { nimekirjas. Add(new OrderDetail() { DetailID = i + 1, Hind=10+i, Kogus=i+100, ProductID = 1000 + i }); } objekt obj = m_service. Save(entity, list);
Assert.IsNotNull(obj); }
[Test] public void Uuendus() { var entity = m_service. Get(1);
entiteet. Value[0] = uus OrderDetail() { ProductID = 1000, DetailID = 1, Hind = 13,34M, Kogus = 200,1M }; m_service. Uuendus(entity); }
[Test] public void Delete() { var entity = m_service. Get(1); m_service. Delete(entity); } }
}
Märkus: testimisel pead viitama nunit.framework tööriistale |
Eelmine:Jaga kahte CC rünnakutööriista, head stressitestimiseksJärgmine:Bi Fujian avaldas Weibos vabanduskirja: Tunnen end väga süüdi ja kurvana
|