Глобальное состояние в приложении asp.net mvc

Проблема: Наша веб-консоль показывает список всех компьютеров, на которых установлено наше приложение. Каждая машина имеет некоторую идентификационную информацию, которая может быть связана с ней. Простые строки, такие как название отдела, название команды и т. д. Нам нужно сделать так, чтобы пользователь мог изменить название этих идентификационных полей и добавить/удалить столько, сколько он хочет. Как мы можем лучше всего реализовать это?

Первоначально я думал, что смогу реализовать это как синглтон. При запуске приложения я мог прочитать последнее установленное удостоверение имена полей из базы данных и создать одноэлементный экземпляр списка строк. Это может быть передано всем функциям, которым необходимо отображать или получать доступ к идентификационной информации. Привлекательность этой опции заключается в том, что если пользователь изменит имя поля идентификации из пользовательского интерфейса или добавит или удалит поля, я могу просто изменить объект-одиночку, и изменение будет отражено.

Однако я чувствую, что должен быть лучший способ достичь того, чего я хочу. Потому что там очень много такой информации, которую пользователь может модифицировать по своему желанию и нам нужно их отслеживать.

Какие-либо предложения?


person Amith George    schedule 09.12.2009    source источник


Ответы (1)


Просто используйте объекты из вашего ORM, чтобы поддерживать и использовать эту информацию в приложении. Многие ORM имеют возможность кэшировать такие вещи, поэтому вы не потеряете из-за этого скорость.

Я не большой поклонник использования Singleton для этого. Модульное тестирование сложно, и в конечном итоге вам все равно придется сохранять его в базе данных.

person Robert Harvey    schedule 09.12.2009
comment
Это создает более серьезную проблему, заключающуюся в том, что сервер умирает, а информация никогда не сохраняется в базе данных, если этот вызов выполняется в методах end или dispose приложения. - person Yuriy Faktorovich; 10.12.2009
comment
Насколько я понимаю, nhibernate сохраняет кеш только для текущего сеанса. поэтому я все равно буду без необходимости нажимать на БД для каждого сеанса. в любом случае, поэтому я создаю класс IdentityInfo с идентификаторами полей, FieldName и, возможно, FieldValue. Затем у меня есть nhibernate, заполняющий список «IdentityInfo» для всех возможных полей идентификации для каждого клиента. Используйте это, чтобы nhibernate затем извлекал фактические значения, которые идентифицируют пользователя... это лучшее решение? потому что я смущен, просто набрав это :) - person Amith George; 10.12.2009
comment
@Yuriy: Подобная информация изменяется лишь изредка, поэтому вы выполняете сохранение каждый раз, когда меняете ее. Вы только кэшируете чтение. - person Robert Harvey; 10.12.2009
comment
@strider: Да, по сути, именно так вы и поступили бы. - person Robert Harvey; 10.12.2009