3

我有应该封装 orm 逻辑的类库。为了避免一些数据库调用,它应该包含某种缓存或静态变量(我想避免它们)。它用于 asp.net 和 wcf 应用程序。由于它是类库,我不想访问 Cache 或其他与 asp.net 相关的东西。由于它们的应用范围性质,我还想避免使用静态变量。

我应该如何实施?你做什么来实现这一目标?

编辑:

简化:想象封装 DAL 的类库。它与数据库对话。里面有一些昂贵的查询。其中一些应该每个用户获取一次并存储在某个地方,其中一些可以每个应用程序使用(也存储以避免将来调用数据库)。问题是通常我会使用缓存,但由于它是 DAL 类库,我想在其中包含此功能(而不是在 asp.net 中)。希望现在更清楚了;)

4

1 回答 1

2

您应该使用缓存:

使用模式、接口等:

你的类库应该是松耦合的。(易于交换,没有交叉引用)

示例(我是如何简化的):

namespace MyDbContext
{
    var cache;
    var db;

    public MyDbContext()
    {
        // Cache init
        cache = ....;

        // DB init (can be factory or singleton)
        db = DataBase.Instance();
    }

    public class Car
    {
        // Db tuple id
        public CarId { get; set; }

        public Car(int id)
        {
             CarId = id;
        }

        public Car GetFromDb()
        {
            // your db code will be here
            Car myCar = ....;

            // cache your object
            cache.Put("Car" + CarId.ToString(), myCar);
            return myCar;
        }

        public Car Get()
        {
            // try to get it from cache or load from db
            Car mycar = cache.Get("Car" + CarId.ToString()) as Car ?? GetFromDb();
        }

        public ClearCache()
        {
            cache.Put("Car" + CarId.ToString(), null);
            // maybe cache.Remove("Car" + CarId.ToString())
        }
    }
}
于 2010-07-29T17:43:22.350 回答