3 votes

Bibliothèque de classes et variables statiques dans asp.net

J'ai une bibliothèque de classes qui devrait encapsuler la logique de l'orm. Pour éviter certains appels à la base de données, elle devrait contenir une sorte de cache ou des variables statiques (je veux les éviter). Il est utilisé dans les applications asp.net et wcf. Comme il s'agit d'une bibliothèque de classe, je ne veux pas accéder au cache ou à d'autres éléments liés à asp.net. Je veux aussi éviter les variables statiques à cause de leur nature de champ d'application.

Comment dois-je procéder ? Que faites-vous pour y parvenir ?

EDITAR:

Pour simplifier : imaginez une bibliothèque de classes encapsulant le DAL. Elle communique avec la base de données. Elle contient des requêtes coûteuses. Certaines d'entre elles doivent être récupérées une fois par utilisateur et stockées quelque part, tandis que d'autres peuvent être utilisées par application (également stockées pour éviter de futurs appels à la base de données). Le problème est que normalement j'utiliserais Cache, mais comme il s'agit d'une bibliothèque de classe DAL, je veux inclure cette fonctionnalité à l'intérieur (pas dans asp.net). J'espère que c'est plus clair maintenant ;)

2voto

Andreas Rehm Points 1546

Vous devriez utiliser la mise en cache :

Modèles d'utilisation, interfaces, etc :

Votre bibliothèque de classes doit être faiblement couplée. (facile à échanger et sans références croisées)

Exemple (comment je procède de manière 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())
        }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X