Мы разработали приложение C # WinForms, работающее на MS SQL Server. До сегодняшнего дня мы использовали очень простой самодельный OR-Mapper (использующий Reflection) с дешевым механизмом кэширования, реализованным с использованием шаблона синглтона. Пользователь запускает функцию «сброса». Архитектура представляет собой простой двухуровневый (клиент, сервер) три уровня (представление и логика на клиенте, MS SQL в качестве уровня данных на сервере).
Обычно мы загружаем около 300 строк и около 30 столбцов, которые меняются довольно часто (и некоторые другие таблицы, которые меняются редко). Различные экземпляры этого приложения работают на разных клиентских компьютерах, загружены одинаковые 300 строк и изменяют данные в случайной строке. Приложение обновит данные немедленно в базе данных. Прежде чем они это сделают, проверяется целостность, поэтому пользователь получает обратную связь, если что-то не так. Но для некоторых строк пользователь видит старые значения на экране, он должен вручную сбросить кэш, когда он хочет быть уверен, что обновленные данные.
Было бы неплохо, если бы приложения сами рассматривали измененные строки. Есть обновления каждые несколько секунд. Но только некоторые из этих обновлений актуальны для других приложений (в зависимости от активного фильтра ...)
Решения, которые я имею в виду:
- Использование OR-Mapper с общим кешем (например, NHibernate с кластерным кешем)
- Открытые вопросы: созданы ли эти кеши L2 для клиентских приложений? Могу ли я запускать обновления пользовательского интерфейса, когда происходят изменения в кэше? Другие решения на базе OR-Mapper?
- Реализация другого уровня с использованием сервера приложений, перемещение логики на этот сервер приложений. Запустите только один экземпляр, который кэширует данные и отправляет события на объекты логики, которые уведомляют других клиентов об обновленных данных. Не кэшируйте какие-либо данные о клиентах.
- Добавить какие-то уведомления об изменениях данных на логическом уровне (широковещательное уведомление ...)
- Открытые вопросы: Существующие библиотеки? Загрузить на SQL Server?
- Полностью другое решение?
Я знаю, что я не получаю решения здесь. Просто нужно подумать об этих решениях (или новых) ... Спасибо за любые комментарии!