您现在的位置是:首页 > .NET

.NET

.net中Attribuge的详细应用(五)

2020-11-15 10:37:33 .NET admin
Attribute在拦截机制上的应用从这一节开始我们讨论Attribute的高级应用,为此我准备了一个实际的例子:我们有一个订单处理系统,当一份订单提交的时候,系统检查库存,如果库存存量满足订单的数量,系统记录订单处理记录,然后更新库存,如
Attribute在拦截机制上的应用

从这一节开始我们讨论Attribute的高级应用,为此我准备了一个实际的例子:我们有一个订单处理系统,当一份订单提交的时候,系统检查库存,如果库存存量满足订单的数量,系统记录订单处理记录,然后更新库存,如果库存存量低于订单的数量,系统做相应的记录,同时向库存管理员发送邮件。为了方便演示,我们对例子进行了简化:
//Inventory.cs
usingSystem;
usingSystem.Collections;

namespaceNiwalkerDemo
{
publicclassInventory
{

privateHashtableinventory=newHashtable();

publicInventory()
{
inventory["Item1"]=100;
inventory["Item2"]=200;
}

publicboolCheckout(stringproduct,intquantity)
{
intqty=GetQuantity(product);
returnqty>=quantity;
}

publicintGetQuantity(stringproduct)
{
intqty=0;
if(inventory[product]!=null)
qty=(int)inventory[product];
returnqty;
}

publicvoidUpdate(stringproduct,intquantity)
{
intqty=GetQuantity(product);
inventory[product]=qty-quantity;
}
}
}

//Logbook.cs
usingSystem;

namespaceNiwalkerDemo
{
publicclassLogbook
{
publicstaticvoidLog(stringlogData)
{
Console.WriteLine("log:{0}",logData);
}
}
}

//Order.cs
usingSystem;

namespaceNiwalkerDemo
{
publicclassOrder
{
privateintorderId;
privatestringproduct;
privateintquantity;

publicOrder(intorderId)
{
this.orderId=orderId;
}

publicvoidSubmit()
{
Inventoryinventory=newInventory();//创建库存对象

//检查库存
if(inventory.Checkout(product,quantity))
{
Logbook.Log("Order"+orderId+"available");
inventory.Update(product,quantity);
}
else
{
Logbook.Log("Order"+orderId+"unavailable");
SendEmail();
}
}

publicstringProductName
{
get{returnproduct;}
set{product=value;}
}

publicintOrderId
{
get{returnorderId;}
}

publicintQuantity
{
get{returnquantity;}
set{quantity=value;}
}

publicvoidSendEmail()
{
Console.WriteLine("Sendemailtomanager");
}
}
}