2010-07-29 78 views
3

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

我该如何实现?你如何做到这一点?

编辑:

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

+0

伴侣,我不明白你想说什么。你可以尝试使用一些pseduo代码或显示一个示例场景的一些工作流程。我只是不明白你在问什么:( – 2010-07-30 23:50:00

回答

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

?:)一些逗号,使其可读? – IamDeveloper 2010-07-29 17:44:12

+1

@Andreas Rehm,Velocity的真名现在是'AppFabric Cache'。我最近一直在做一些研究,看起来很有希望。在这里下载它,http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=467e5aa5-c25b-4c80-a6d2-9f8fb0f337d2 – 2010-07-29 17:53:20

+0

是的 - 它现在的AppFabric - 你可以在这里找到更多的信息: http ://msdn.microsoft.com/en-us/windowsserver/ee695849.aspx – 2010-07-29 17:59:31