Мне нравится создавать свой собственный класс статической оболочки для класса System.Web.Caching.Cache .
По сути, вы создаете класс в модуле веб-приложения и создаете все стандартные функции кэширования (получение, добавление, удаление и т. Д.). Методы должны быть реализованы с использованием обобщений для обеспечения безопасности типов.
Здесь - хороший пример
Затем вы создаете другой статический класс, который действует как модель сервиса от вашего веб-уровня до вашего уровня данных.
Ваш веб-уровень будет вызывать методы для статического класса, который сначала будет генерировать CacheKey на основе предоставленных параметров метода, проверять кэш, если найден возврат, в противном случае вызывать слой данных, добавлять в кэш и возвращать.
В зависимости от того, как настроены ваши бизнес-объекты, вам может потребоваться предоставить глубокие копии (т. Е. Реализовать IClonable и ovveride метод Clone) для ваших объектов.
Кроме того, решение для кэширования зависит от архитектуры веб-фермы. Если у вас много веб-серверов, скорее всего, ваши данные могут устареть, поэтому вам нужно выбрать лучший вариант (SQLCacheDependecy, распределенное кэширование и т. Д.).