Библиотека классов и статические переменные в asp.net - PullRequest
3 голосов
/ 29 июля 2010

У меня есть библиотека классов, которая должна инкапсулировать логику orm.Чтобы избежать некоторых вызовов БД, он должен содержать какой-то кеш или статические переменные (я хочу их избегать).Он используется в приложениях asp.net и wcf.Поскольку это библиотека классов, я не хочу получать доступ к Cache или другим связанным с asp.net материалам.Я также хочу избежать статических переменных из-за их природы области применения.

Как мне это реализовать?Что вы делаете для этого?

РЕДАКТИРОВАТЬ:

Для упрощения: представьте себе библиотеку классов, инкапсулирующую DAL.Это говорит с базой данных.Внутри есть несколько дорогостоящих запросов.Некоторые из них должны быть извлечены один раз для каждого пользователя и сохранены где-нибудь, а некоторые из них могут быть использованы для каждого приложения (также хранятся во избежание будущих обращений к БД).Дело в том, что обычно я использовал бы Cache, но, поскольку это библиотека классов DAL, я хочу включить эту функцию в нее (не в asp.net).Надеюсь, теперь все понятно;)

1 Ответ

2 голосов
/ 29 июля 2010

Вы должны использовать кеширование:

Использование шаблонов, интерфейсов и т. Д .:

Ваша библиотека классов должна быть слабо связана. (Легко обменять и без перекрестных ссылок)

Пример (как я это упрощенно делаю):

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())
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...