我有类库,应该封装orm逻辑。为了避免一些db调用,它应该包含某种缓存或静态变量(我想避免它们)。它用于asp.net和wcf应用程序。由于它是类库,我不想访问Cache或其他asp.net相关的东西。我还想避免静态变量因为它们的应用范围本质。
我该如何实现?你是怎么做到的?
编辑:
简化:想象一下封装DAL的类库。它与数据库对话。里面有一些昂贵的查询。其中一些应该每个用户获取一次并存储在某个地方,其中一些可以按应用程序使用(也存储以避免将来调用DB)。通常我会使用Cache,但由于它是DAL类库,我想在其中包含此功能(而不是在asp.net中)。希望现在更清楚了;)
答案 0 :(得分: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())
}
}
}