A2D Framework - 看如何精简业务逻辑 - 缓存子系统
A2D中一项功能是关于Cache的,能够将判断、获取、删除cache的代码缩减到最少量,如下是Order业务逻辑的demo示范:
interface IOrder
{
[Cachable("Order.GetMessage", "Default", ExpireType = CacheExpireType.Absolutely, Increment = )]
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 = ;
while (true)
{
if (i % ==)
o1.UpdateMessage("changed at"+DateTime.Now); //调用这个函数后,会强制delete GetMessage所对应的缓存 Thread.Sleep();
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</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中了:

A2D Framework网址:https://a2d.codeplex.com/SourceControl/latest
如何下载:

A2D Framework - 看如何精简业务逻辑 - 缓存子系统的更多相关文章
- 9.1.3 .net framework通过业务逻辑层自动生成WebApi的做法
首先需要说明的是这是.net framework的一个组件,而不是针对.net core的.目前工作比较忙,因此.net core的转换正在编写过程中,有了实现会第一时间贴出来. 接下来进入正题.对于 ...
- 减少存储过程封装业务逻辑-web开发与传统软件开发的思维模式不同
本篇文章讨论并不是:不要使用存储过程,因为有些事情还是要存储过程来完成,不可能不用.而是关于:"业务逻辑是不是要封装在存储过程中实现,这样子php.java等就是调用存储过程". ...
- 问题(bug)确实不在代码逻辑上面,往往是配置、权限或者业务逻辑之外的地方(转)
不能说所有的bug都是纸老虎,但往往那种看似很奇葩的bug,导致的原因确实很简单,烦了你一段时间,找到真相又让你忍不住一笑.什么是奇葩的bug呢.我的定义是:代码逻辑都一样,但在A处是好的,到了B处就 ...
- 从App业务逻辑中提炼API接口
2.1 从App业务逻辑中提炼API接口 业务逻辑思维导图 功能-业务逻辑思维导图 基本功能模块关系 功能模块接口UML(设计出API) 在设计稿标注API 编写API文档 2.2 设计API的要点 ...
- 一步一步实现web程序信息管理系统之三----登陆业务逻辑实现(验证码功能+参数获取)
本篇紧接着上一篇文章[一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面] 验证码功能 一般验证码功能实现方式为,前端界面访问一个url请求,后端服务代码生成一个图片流返回至浏览器 ...
- 亿级用户下的新浪微博平台架构 前端机(提供 API 接口服务),队列机(处理上行业务逻辑,主要是数据写入),存储(mc、mysql、mcq、redis 、HBase等)
https://mp.weixin.qq.com/s/f319mm6QsetwxntvSXpKxg 亿级用户下的新浪微博平台架构 炼数成金前沿推荐 2014-12-04 序言 新浪微博在2014年3月 ...
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 6 - 业务逻辑
Part 3: 设计逻辑层:核心开发 如前所述,我们的解决方案如下所示: 下面我们讨论整个应用的结构,根据应用中不同组件的逻辑相关性,分离到不同的层中,层与层之间的通讯通过或者不通过限制.分层属于架构 ...
- ASP.NET MVC5 网站开发实践(一) - 框架(续) 模型、数据存储、业务逻辑
上次搭建好了项目框架,但还是觉得不太对劲,后来才想起来没有对开发目标进行定位,这个小demo虽然不用做需求分析,但是要实现什么效果还得明确.后来想了一下就做个最简单的网站,目标定为小公司进行展示用的网 ...
- 从零开始,搭建博客系统MVC5+EF6搭建框架(1),EF Code frist、实现泛型数据仓储以及业务逻辑
前言 从上篇30岁找份程序员的工作(伪程序员的独白),文章开始,我说过我要用我自学的技术,来搭建一个博客系统,也希望大家给点意见,另外我很感谢博客园的各位朋友们,对我那篇算是自我阶段总结文章 ...
随机推荐
- java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;
<java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...
- Bayboy功能详解
Bayboy功能详解 一.Badboy中的检查点 1.1以sogou.com搜索为例,搜索测试 步骤:打开Badboy工具,在地址栏中输入搜狗网址:输入 测试 进行搜索:点击红色按钮停止录制 1.2添 ...
- linux(centos)无中文输入,如何解决
1.终端执行安装命令 yum install "@Chinese Support" 2.如下图,多出Input method 3.点击进行配置 4.reboot重启系统,新建一个文 ...
- 关于wordpress慢的问题
随笔记载: 关于wordpress访问慢的原因,主要是wordpress采用了google前端库, 需替换wordpress/wp-includes/script-header.php中所有的goog ...
- Cisco 日常巡检命令
https://www.cnblogs.com/qzqdy/p/8116903.html 日常排错命令6 交换机的前面板有几个指示灯,用于监控系统的活动和性能.这些指示灯称之为发二极管(LED) 1. ...
- wamp 中安装cakephp Fatal error: You must enable the intl extension to use CakePHP. in XXX
今天在wamp下安装cakephp3.x的时候,报出这么一条错误:Fatal error: You must enable the intl extension to use CakePHP. in ...
- 4.6Python数据处理篇之Matplotlib系列(六)---plt.hist()与plt.hist2d()直方图
目录 目录 前言 (一)直方图 (二)双直方图 目录 前言 今天我们学习的是直方图,导入的函数是: plt.hist(x=x, bins=10) 与plt.hist2D(x=x, y=y) (一)直方 ...
- Alpha阶段 - 博客链接合集
Alpha阶段 - 博客链接合集 项目Github地址 安卓端(Stardust):https://github.com/StardustProject/Stardust 服务器端(Gravel):h ...
- 【Teradata】配置PE和AMP(congfig和reconfig工具、vprocmanager)
The Reconfiguration and Configuration utilities are used to define the AMPs and PEs that operate tog ...
- flex布局大讲解
http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool