举个例子:我有如下的一个需求,当我想要取得用户信息的时候,会先从本地缓存中查找,找不到然后从分布式缓存中查找,最后找不到再从数据库中查询。但是有些场景我又不需要查询数据库。
所以我想建立如下这种模型。
public UserEntity GetUserInfo(ListdataSources) { var xxxx = new UserEntity(); if(dataSources.Any(DataSource.Local) { //从本地缓存中获取 return xxxx; } if(dataSources.Any(DataSource.Distribution) { //从分布式缓存中获取 //更新本地缓存 return xxxx; } if(dataSources.Any(DataSource.DB) { //从DB中获取 //更新分布式缓存 //更新本地缓存 } return xxxx; }
但是每次调用者都去构建一个List,比较麻烦,此时我们可以使用枚举中的Flags特性,修改程序如下:
首先是枚举的定义上,要加上 [Flags] 特性标签,并且定义 一般都是 2的n次方,主要是便于位移运算
////// 数据取得地方 /// [Flags] public enum DataSource { ////// 本地缓存 /// [Description("本地缓存")] LocalCache = 1, ////// 分布式缓存 /// [Description("分布式缓存")] DistributeCache = 2, ////// 数据库 /// [Description("数据库")] DB = 4, }
修改代码:
public UserEntity GetUserInfo(DataSource dataSources) { var xxxx = new UserEntity(); if(dataSources.HasFlags(DataSource.Local) { //从本地缓存中获取 return xxxx; } if(dataSources.HasFlags(DataSource.Distribution) { //从分布式缓存中获取 //更新本地缓存 return xxxx; } if(dataSources.HasFlags(DataSource.DB) { //从DB中获取 //更新分布式缓存 //更新本地缓存 } return xxxx; }
调用的地方,可以通过“|”来指定,例如我只想用分布式缓存和数据库,那么:
var userInfo = GetUserInfo(DataSource.Distribution | DataSource.DB);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。