2010-07-29 82 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