专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

A2D Framework - 看如何精简业务逻辑 - 缓存子系统

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++;
            }
        }

运行效果图:

72_1.png

下面是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</When>
      </WhenList>
      <ThenList>
        <Then>A2DFramework.CacheService.CacheEventHandlers.CachePutEventHandler</Then>
      </ThenList>
    </EventPair>
    <EventPair>
      <WhenList>
        <When>A2DFramework.CacheService.CacheEvents.CacheRemovedEvent</When>
      </WhenList>
      <ThenList>
        <Then>A2DFramework.CacheService.CacheEventHandlers.CacheRemovedEventHandler</Then>
      </ThenList>
    </EventPair>
    <!--缓存系统的事件支持  END-->
  </EventSetting>
</A2D>

CacheStorage节点中的Storage节点可以有多个,目前只定义了一个节点:Default, 这个Default要与IOrder中的Cachable标签中的参数对应起来

EventSetting节点不能省略,因为缓存子系统依赖于事件子系统。

本demo程序已经更新到A2D中了:

72_2.png

A2D Framework网址:https://a2d.codeplex.com/SourceControl/latest

如何下载:

72_3.png

文章永久链接:https://tech.souyunku.com/38956

未经允许不得转载:搜云库技术团队 » A2D Framework - 看如何精简业务逻辑 - 缓存子系统

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们