Здесь мне нужно кэшировать некоторые объекты, например, дерево страниц в системе управления контентом (CMS).Система позволяет разработчикам писать плагины, в которых они могут получить доступ к кэшированному дереву страниц.Хорошо это или плохо, чтобы сделать кэшируемое дерево страниц изменчивым (то есть, существуют установщики для объектов узла дерева, и / или мы выставляем метод Add, Remove в коллекции ChildPages. Таким образом, клиентский код может устанавливать свойства дерева страницузлы, и добавлять / удалять узлы дерева свободно)?
Вот мое мнение:
(1) Если дерево страниц является неизменным, разработчики плагинов не имеют возможностиизменить дерево неожиданно.Таким образом, мы можем избежать некоторых тонких ошибок.
(2) Но иногда нам нужно изменить имя страницы.Если дерево страниц является неизменным, мы должны вызвать некоторый метод, например «Refresh ()», чтобы обновить кэш.Это приведет к попаданию в базу данных (таким образом, всего два попадания в базу данных, но мы должны были избежать одного из двух попаданий в базу данных).В этом случае, если дерево страниц является изменяемым, мы можем напрямую изменить имя в дереве страниц, чтобы обновить дерево (поэтому требуется только 1 попадание в базу данных).
Что вы думаете об этом?И что вы будете делать, если столкнетесь с такой ситуацией?
Заранее спасибо!:)
ОБНОВЛЕНИЕ: Дерево страниц выглядит примерно так:
public class PageCacheItem {
public string Name { get; set; }
public string PageTitle { get; set; }
public PageCacheItemCollection Children { get; private set; }
}
Моя проблема здесь не в хеш-коде, потому что PageCacheItem не будет помещен вхэшсет или словарь в качестве ключей.
Мой пролбем:
Если PageCacheItem (узел дерева) изменчив, то есть существуют установщики для свойств (например, имеет установщик для Name, PageTitleимущество).Если некоторые авторы плагинов изменяют свойства PageCacheItem по ошибке, система будет в неправильном состоянии (данные в кэше не согласуются с данными в базе данных), , и эта ошибка труднадля отладки , потому что это вызвано каким-то плагином, а не самой системой.
Но если PageCacheItem доступен только для чтения, может быть сложно реализовать эффективную функциональность «обновления кэша», потому что нет установщиковсвойства, мы не можем просто обновить свойства, установив для них последние значения.
UPDATE2
Спасибо, ребята.Но я должен отметить одну вещь: я не собираюсь разрабатывать общую инфраструктуру кэширования, а буду разрабатывать некоторые API поверх существующей инфраструктуры кэширования.Так что мои API - это промежуточный уровень между базовой структурой кэширования и авторами плагинов.Автору плагина не нужно ничего знать о базовой структуре кэширования.Ему нужно только знать, что это дерево страниц извлекается из кеша.И он заставляет использовать API-интерфейсы PageCacheItem со строгим типом, а не «объект» со слабым типом, извлеченный из базовой структуры кэширования.
Таким образом, мои вопросы касаются разработки API для авторов плагинов , то есть, хорошо или плохо сделать изменяемый класс API PageCacheItem (здесь свойства mutable == могут быть установлены вне PageCacheItemкласс)? * * 1042