A2D中一項功能是關於Cache的,能夠將判斷、獲取、刪除cache的代碼縮減到 最少量,如下是Order業務邏輯的demo示范:
interface IOrder
{
[Cachable("Order.GetMessage", "Default",
ExpireType = CacheExpireType.Absolutely, Increment = 5)]
string GetMessage();
[CacheEvict("Order.GetMessage", "Default")]
void UpdateMessage(string userInput);
}
[AOPServiceEnabled]
class OrderImpl : ContextBoundObject, IOrder
{
private string msg = "not changed message";
public string GetMessage()
{
Thread.Sleep(2000); //模仿重負載處理,延時2秒
return string.Format("{0}-{1}", msg,
DateTime.Now);
}
public void UpdateMessage(string userInput)
{
msg = userInput;
}
}
在OrderImpl(業務邏輯實現類)中,沒有看到判斷、更新、獲取cache的代碼 ,非常簡潔(控制cache的代碼寫在了接口部分)。
那如何調用這個Order邏輯呢?
ObjectFactory.Register<IOrder, OrderImpl>(); //IoC注冊
var o1 = ObjectFactory.Resolve<IOrder>(); //獲取IOrder實例
ObjectFactory是A2D的IoC控制器,能進行兩種方式的注入:普通Instance以 及單例。
看看主demo程序:
static void Main(string[] args)
{
A2DConfig.LoadConfig(); //A2D的配置文件,稍後給出
ObjectFactory.Register<IOrder, OrderImpl>();
var o1 = ObjectFactory.Resolve<IOrder>();
int i = 1;
while (true)
{
if (i % 11==0)
o1.UpdateMessage("changed at"+DateTime.Now); //調用這個函數後,會強制delete GetMessage所對應的緩存
Thread.Sleep(1000);
Console.WriteLine(o1.GetMessage());
i++;
}
}
運行效果圖:

下面是A2D的配置文件:
<?xml version="1.0" encoding="utf-8" ?>
<A2D>
<CacheStorages>
<Storage Location="Default" Scope="PerSession">
<!--PerSession/Global-->
<!--相當於1級緩存(本地, 沒有網絡I/O)-->
<LocalCacheSetting>
<CacheAlgorithm>LFU</CacheAlgorithm><!--LFU/LRU/None-->
<CacheCapacity>1000</CacheCapacity>
</LocalCacheSetting>
</Storage>
</CacheStorages>
<EventSetting>
<!--客戶端的名稱,需要發往event server-->
<Identifier>app server name 1</Identifier>
<RetryConnectInterval>1000</RetryConnectInterval>
<!--要連接的event server信息-->
<EventServer>
<Enabled>false</Enabled>
<Address>127.0.0.1</Address>
<Port>202020</Port>
</EventServer>
<!--訂閱的事件以及響應事件的class type定義-->
<!--緩存系統的事件支持 START-->
<EventPair>
<WhenList>
<When>A2DFramework.CacheService.CacheEvents.CachePutEvent</Whe
n>
</WhenList>
<ThenList>
<Then>A2DFramework.CacheService.CacheEventHandlers.CachePutEventH
andler</Then>
</ThenList>
</EventPair>
<EventPair>
<WhenList>
<When>A2DFramework.CacheService.CacheEvents.CacheRemovedEvent<
/When>
</WhenList>
<ThenList>
<Then>A2DFramework.CacheService.CacheEventHandlers.CacheRemovedEv
entHandler</Then>
</ThenList>
</EventPair>
<!--緩存系統的事件支持 END-->
</EventSetting>
</A2D>
CacheStorage節點中的Storage節點可以有多個,目前只定義了一個節點: Default, 這個Default要與IOrder中的Cachable標簽中的參數對應起來
EventSetting節點不能省略,因為緩存子系統依賴於事件子系統。
本demo程序已經更新到A2D中了:

查看本欄目