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岁找份程序员的工作(伪程序员的独白),文章开始,我说过我要用我自学的技术,来搭建一个博客系统,也希望大家给点意见,另外我很感谢博客园的各位朋友们,对我那篇算是自我阶段总结文章 ...
随机推荐
- tkinter——GUI设计实操
1.创建root: from tkinter import * root = Tk() root.title('GUI设计') # root.attributes("-alpha" ...
- 分布式:Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
- 以太坊 ERC20 与 ERC721 深度解密
去年11月份的一段时间,Ethereum网络突然变的特别拥堵,原因是兴起了一款以太坊养猫的Dapp游戏,超级可爱的猫形象,再加上配种,繁殖和拍卖等丰富的玩法,风靡了币圈. 一时间币圈大大小小的人都在撸 ...
- AspNet mvc的一个bug
[HttpPost] public ActionResult updateLoan(TuWenMilitaryRank entity) 使用mvc绑定表单 每次绑定的对象都为null,查看Reques ...
- python之bytes和string
转自:https://www.cnblogs.com/skiler/p/6687337.html 1.bytes主要是给在计算机看的,string主要是给人看的 2.中间有个桥梁就是编码规则,现在大趋 ...
- MySQL 数据库 简单操作命令 (部分总结)
1.查看进程方式查看数据库 ps - ajx|grep mysql 2.登录 MySQL mysql -u用户名 -p密码 3.开启服务 sudo service mysql start 4.停止服务 ...
- shell的while和until 的用法
shell while循环工作中使用的不多,一般适用于守护进程程序或始终循环执行场景,其他循环计算等. while条件句: 语法: while 条件 do 指令… done ok,我们测试一下: 测试 ...
- Markdown编辑器开发记录(二):Markdown编辑器的使用与开发入门
Markdown编辑器的使用与开发入门 在部门做技术分享的时候简单整理了一下手里的资料 1 是什么 1.1 Markdown是一种轻量级标记语言 Markdown是一种轻量级标记语言,创始人为约翰·格 ...
- css3 object-fit详解
上传头像的时候遇到了头像变形的问题,最后通过object-fit: cover完美解决了.这个CSS属性可以达到最佳最完美的居中自动剪裁图片的功能. object-fit理解 CSS3 backgro ...
- CMD命令行netsh添加防火墙规则
1.为e:\f.exe 添加防火墙规则(参考:https://www.cnblogs.com/zhen656/p/4275270.html),需要管理员权限. >netsh advfirewal ...