为POCO实现简单缓存

时间:2011-12-06 04:50:11

标签: c# .net

在id和对象之间映射的最佳方法是什么?对于具有属性PreferenceId<一个id和偏好。我希望Preferences从Cache中读取没有查询数据库。从字典中获取首选项object.Like preferencesDictionary [id]。为每个项目查询数据库的速度很慢。因为每个产品都有3-4个首选项,每个首选项引用一个组,数据太多。再次编写相同的映射代码似乎很糟糕。

我不能,我也不想使用ORM。

最简单的解决方案是在POCO的属性中嵌入从缓存中读取的代码。但这对我来说似乎不正确。任何解决方案如何实现这一目标?

1 个答案:

答案 0 :(得分:3)

假设您正在使用存储库模式(您不必这样做,但其他数据访问模式的想法类似):

interface IPocoRepository {
    Poco GetById(int id);
}

class DatabasePocoRepository : IPocoRepository {
    public Poco GetById(int id) {
        // read the POCO from the database
    }
}

class CachePocoRepository : IPocoRepository {
    private readonly IPocoRepository pocoRepository;
    public PocoCachingRepository(IPocoRepository pocoRepository) {
        this.pocoRepositry = pocoRepository;
    }

    public Poco GetById(int id) {
        // read from the cache
        // if available, return it
        // if not, load using pocoRepository and cache
    }
}

现在,只要您需要PocoRepository并希望启用缓存,请使用CachingPocoRepository。显然你需要编写缓存策略。