1. 引言
很多Web项目,都需要和数据库打交道,典型的就是CRUD(读,写,更新,删除)操作。无论是哪种数据库,Asp.Net MVC 作为后端框架的项目,都有很多操作数据库的类库。最近在一个Web项目中就用到了EntityFramework来存取Sql Server。相信很多人都懂得,如何利用EntityFramework存取数据,所以这方面不做详细的介绍。 今天给大家介绍一种如何利用订阅模式来实现缓存更新。
实现过程主要参照NopCommerce,它是一个开源的电商平台,里面有不少精妙的设计,值得每一个.Net程序员一看。
2. 实现
先来看看未采用Cache的设计,定义一个Service,这个Service主要是利用EntityFramework存取数据。
Service接口和默认实现
这个实现能够满足基本的需求,但是缺乏优化使得每次当Service调用GetAll 函数的时候,都会从数据库读取所有该类条目。如果没有Update,Create或者Delete每次GetAll返回的数据都是一样的。
因此可以在GetAll这里添加缓存,在Update,Create,Delete更新缓存。
首先我们利用.Net自带的System.Runtime.Caching.ObjectCache 类 定义缓存接口以及简单实现:
到此为止,已经可以实现缓存跟新了,只要在Insert,Update,Delete 函数里面添加 缓存更新即可。我们进一步利用订阅模式。
订阅模式 一般有三个对象,一个是Subject代表发送给所有订阅者的主题信息。一个是Consumer代表订阅者接受订阅的Subject, 另一个是Publisher代表发送Subject的实现。
这里我们定义几个Subject
定义Consumer接口和Cache相关的Consumer实现
定义publish接口和实现
最终的Service多了ICache 和 IEventPublish 两个对象:
最后通过Unity实现依赖注入
3. 总结
这是订阅模式的一种运用,在NopCommerce里面有很多设计模式都运用的非常巧妙,对于EntityFramework的优化远不止这些,以后再给大家分享。
Original: https://www.cnblogs.com/VectorZhang/p/5605901.html
Author: 禅宗花园…迷失的佛
Title: 利用订阅模式实现缓存更新
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572564/
转载文章受原作者版权保护。转载请注明原作者出处!