2010-07-29 2 views
3

J'ai une bibliothèque de classes qui devrait encapsuler une logique orm. Pour éviter certains appels db, il devrait contenir une sorte de cache ou de variables statiques (je veux les éviter). Il est utilisé dans les applications asp.net et wcf. Comme c'est une bibliothèque de classes, je ne veux pas accéder à Cache ou à d'autres choses liées à asp.net. Je veux également éviter les vars statiques en raison de la nature de la portée de l'application d'entre eux.Bibliothèque de classes et variables statiques dans asp.net

Comment est-ce que je devrais l'implémenter? Que faites-vous pour y parvenir?

EDIT:

Pour simplifier: imaginer encapsulage bibliothèque de classes DAL. Il parle à la base de données. Il y a des requêtes coûteuses à l'intérieur. Certains d'entre eux devraient être récupérés une fois par utilisateur et stockés quelque part et certains d'entre eux pourraient être utilisés par application (également stockés pour éviter les futurs appels à DB). La chose est que normalement j'utiliserais le cache, mais puisque c'est la bibliothèque de classe DAL, je veux inclure cette fonctionnalité dedans (pas dans asp.net). Espérons que c'est plus clair maintenant;)

+0

Mate, je ne comprends pas ce que vous essayez de dire. Peut-on essayer d'utiliser du code pseduo ou afficher un workflow d'un exemple de scénario. Je ne comprends pas ce que vous demandez :( –

Répondre

2

Vous devez utiliser la mise en cache:

Utilisation Patterns, Interfaces etc:

Votre bibliothèque de classe doit être couplé de manière lâche. (Facile à échanger et pas des références croisées)

Exemple (comment je fais simplifiée):

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

? :) quelques virgules, pour le rendre lisible? – IamDeveloper

+1

@Andreas Rehm, Le vrai nom de Velocity est maintenant 'AppFabric Cache'. J'ai fait des recherches à ce sujet dernièrement et cela semble très prometteur. Téléchargez-le ici, http://www.microsoft.com/downloads/details.aspx?displaylang=fr&FamilyID=467e5aa5-c25b-4c80-a6d2-9f8fb0f337d2 –

+0

Oui - c'est maintenant AppFabric - vous pouvez trouver plus d'informations ici: http : //msdn.microsoft.com/en-us/windowsserver/ee695849.aspx –

Questions connexes