gpt4 book ai didi

c# - asp.net中的类库和静态变量

转载 作者:行者123 更新时间:2023-11-30 17:21:31 25 4
gpt4 key购买 nike

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

我应该如何实现?您如何实现这一目标?

编辑:

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

最佳答案

你应该使用缓存:

使用模式、接口(interface)等:

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

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

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())
}
}
}

关于c# - asp.net中的类库和静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3365439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com