博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DDD~WCF做中间件,实现多个项目的缓存共享
阅读量:6511 次
发布时间:2019-06-24

本文共 3078 字,大约阅读时间需要 10 分钟。

事情是这样的,前台网站有些数据不希望每次都从数据库里读,所以,应该做个缓存,而引起缓存更新的入口来自网站的后台管理,而前台和后台被部署在不同的网站中,这时缓存的更新就成了问题,前台的缓存与后台的操作不能联系到一起,为了解决这个问题,我引入了WCF作为中间件,所以与数据库的操作,读,写都来自一个入口,那就是WCF,WCF用户告诉你是否从缓存取数据,所有缓存的数据也缓存在WCF中,OK,想法不错,下面来说一下具体的实现步骤。

一 首先看一下结构图:

注意看我的结构图,前台aop_cache和后台aop_cache_background项目都引用aop_cache_webservice项目,而它们没有对数据层aop_cache_data的引用,这个aop_cache_webservice是一个WCF项目,主要实现与数据层的通讯工作,当然也可以与BLL业务层通讯,这个架构主要是讲如何实现前后台共享缓存,而并非讲架构,所以重要不再架构,而在实现共享缓存。

二 WCF层实现所需要的DLL,主要是unity,cache,interception,log4net等,如图:

三 对于unity,wcf,cache的调用上,我进行了二次封装,如图:

四 看了这些,我们再来看一下,WEB层调用WCF层的代码片断:

public ActionResult Index()        {            //  通过WCF获取远程数据,不走缓存, 走config中的
using (ServiceProxy
proxy = new ServiceProxy
()) { return View(proxy.Channel.GetClassroom_Info()); } }

web层的配置文件包含了对WCF的调用

 

五 WCF层调用DAL层的代码,使用unity来做方法拦截与依赖注入,将cache功能注入到指定方法中

IClassroom_InfoRepository _iClassroom_InfoRepository = ServiceLocator.Instance.GetService
(); public void InsertClassroom_Info(Classroom_Info entity) { _iClassroom_InfoRepository.InsertClassroom_InfoData(entity); } public List
GetClassroom_Info() { return _iClassroom_InfoRepository.GetClassroom_InfoData(); }

六 对于WCF的配置文件,我们要重要看一下,它包含了数据库连接串的配置和unity的配置

 

七 DAL层的实现,由接口和实现两部分组成,接口的方法上规定了是否要进行cache操作

public interface IClassroom_InfoRepository    {        [Caching(CachingMethod.Remove, "GetClassroom_InfoData")]        void InsertClassroom_InfoData(Classroom_Info entity);        [Caching(CachingMethod.Get)]        List
GetClassroom_InfoData(); }

实现很简单,只是一个测试而以

public class Classroom_InfoRepository : TsingDa_NewLearningBarRepository
, IClassroom_InfoRepository { public void InsertClassroom_InfoData(Classroom_Info entity) { base.Insert(entity); } public List
GetClassroom_InfoData() { return base.GetModel().ToList(); } }

 

转载于:https://www.cnblogs.com/lori/p/3398869.html

你可能感兴趣的文章
Node.js+Koa开发微信公众号个人笔记(一)准备工作
查看>>
Android 图片缓存处理
查看>>
MySQL数据库锁定机制
查看>>
elasticsearch
查看>>
阿里盒马领域驱动设计实践
查看>>
vuex 存值 及 取值 的操作
查看>>
HDU 2242 考研路茫茫——空调教室(边双连通)
查看>>
如何在C#项目中使用NHibernate
查看>>
安装python包到指定虚拟环境
查看>>
力扣(LeetCode)21
查看>>
网页视频流m3u8/ts视频下载
查看>>
聊聊flink的TableFactory
查看>>
Python 基础起步 (十) 什么叫函数?
查看>>
8年软件测试工程师感悟——写给还在迷茫中的朋友
查看>>
5G一周热闻:华为夺联通5G大单,首张5G电话卡发放
查看>>
“迁移策略+新容器运行时”应对有状态应用的冷热迁移挑战
查看>>
使用Swoole加速Laravel(正式环境中)
查看>>
mockjs让前端开发独立于后端
查看>>
延迟脚本的方式
查看>>
1.4linux单用户模式下修改root密码和救援模式修改root密码
查看>>