当前位置:主页 >完美世界电竞手机app

完美世界电竞手机app:您善于使用匿名函数吗?

发布时间:02月07日 阅读:676



考试测验从缓存中获取数据,假如数据存在则返回,否则从数据源中获取数据,放入缓存,然后返回。

您是否认识上面这段逻辑阐明?假如您的利用中大年夜量应用了缓存,则上面这段逻辑很可能会呈现许多次。例如:

CacheManager cacheManager = new CacheManager();

public List GetFriends(int userId)

{

string cacheKey = "friends_of_user_" + userId;

object objResult = cacheManager.Get(cacheKey);

if (objResult !=完美世界电竞手机app null) return (List)objResult;

List result = new UserService().GetFriends(userId);

cacheManager.Set(cacheKey, resu完美世界电竞手机applt);

return result;

}

这段逻辑彷佛对照简单,不过在实际利用中,从数据源中获取数据可能不是简单地调用一个措施,而是必要多个类之间的协作,事务节制等等,而缓存的读写可能也会比上面的示例来的繁杂。是以,一个可读性高的做法是供给三个自力的措施(读取缓存,读取数据源,写入缓存),使得一个拥有缓存的措施只必要简单地实现上面所提到的读写逻辑即可。

正如文章开首所说,假如您的利用中大年夜量完美世界电竞手机app应用了缓存,则上面这段逻辑很可能会呈现许多次。在必然程度上这种重复也是多余的,违抗了DRY原则。是以我们设法供给一个基类,把这段缓存读写逻辑封装起来:

public abstract class CacheReader

{

/// 从缓存中获取数据

///

从缓存中取得的数据

/// 从缓存中成功取得数据则返回true,反之则false

public abstract完美世界电竞手机app bool GetFromCache(out T data);

/// 从数据源获取数据

/// 从数据源取得的工具

public abstract T ReadFromSource();

/// 将数据写入缓存

///

将要写入缓存的数据

public abstract void SetToCache(T data);

public T Read()

{

T data;

if (this.GetFromCache(out data)) return data;

data = this.ReadFromSource();

this.SetToCache(data);

return data;

}

}

于是我们将这段缓存读写逻辑集中到了CacheReader类的Read措施中。而对付每个缓存读写操作,我们只要实现一个CacheReader类的子类,供给三个抽象措施的详细实现即可。如下:

private class GetFriendCacheReader : CacheReader>

{

private int m_userId;

private string m_cacheKey;

private CacheManager m_cacheManager;

public GetFriendCacheReader(int userId, CacheManager cacheManager)

{

this.m_userId = userId;

this.m_cacheKey = "friends_of_user_" + userId;

this.m_cacheManager = cacheManager;

}

public override bool GetFromCache(out List data)

{

object objData = this.m_cacheManager.Get(this.m_cacheKey);

if (objData == null)

{

data = null;

return false;

}

data = (List)objData;

return true;

}

public override List ReadFromSource()

{

return new UserService().GetFriends(this.m_userId);

}

public override void SetToCache(List data)

{

this.完美世界电竞手机appm_cacheManager.Set(this.m_cacheKey, data);

}

}

共3页:

上一页1

2

3

下一页



上一篇:雷竞技下载官方版:一棵小草的坚守新闻频道中国青年网
下一篇:电竞下载app送彩金:《环球时报》社评:向李文亮医生致以敬意