Кеширование и AOP в Mendix: существует ли унифицированный или стандартизированный подход для кэширования на стороне сервера в приложении Mendix?

Использование Mendix Business Modeler для создания веб-приложений принципиально отличается от разработки веб-приложений с использованием таких технологий, как Java/Spring/JSF. Но я постараюсь сравнить два ради этого вопроса:

В приложении на основе Java / Spring я могу интегрировать свое приложение со сторонним продуктом Ehcache для кэширования данных на уровне метода. Например, я могу настроить ehcache для хранения возвращаемого значения для данного метода (с определенным временем жизни). Всякий раз, когда вызывается этот метод, ecache автоматически проверяет, был ли метод вызван ранее с теми же параметрами и есть ли сохраненное возвращаемое значение в кэше. Если это так, метод фактически никогда не выполняется, и вместо этого возвращается возвращаемое значение кэшированного метода.

Я хотел бы иметь такие же возможности в Mendix, но в этом случае я бы кэшировал возвращаемые значения Microflow. Кроме того, я не хочу быть вынужденным добавлять действия повсеместно, явно говоря Microflow, чтобы проверить кэш. Я хотел бы зарегистрировать свои микропотоки для кэширования в одном централизованном месте или просто пометить каждый микропоток для кэширования. Другими словами, этот вопрос так же важен для концепции аспектно-ориентированного программирования (AOP) в Mendix, как и для кэширования: есть ли способ получить хуки для вызова Microflow, чтобы я мог применять операции до и после выполнения? По моему мнению, те же причины, по которым у АОП есть свое место в Java, существуют в Mendix.

1 ответ

Решение

При работе с приложением Mendix оно пытается сделать для вас как можно больше, в этом случае это означает, что на платформе уже есть кэш объектов для хранения всех объектов, которые необходимо кэшировать. Внутренне платформа Mendix использует Ehcache для этого.

Однако на этот кеш на самом деле невозможно повлиять, как вы это обычно делаете в Java/Spring. Это связано со всеми функциональными возможностями платформы Mendix, которая уже пытается кэшировать все объекты настолько эффективно, насколько это возможно.
Каждый созданный вами объект всегда добавляется в кеш. При работе с этим объектом он остается в кэше до тех пор, пока Платформа не обнаружит, что к конкретному объекту нельзя получить доступ ни через пользовательский интерфейс, ни через микропоток. Также доступны вызовы API, которые инструктируют платформу сохранять объект в кэше независимо от его использования. Но это не дает вам гибкости, как вы просили.


Но конкретно на ваш вопрос, мой первоначальный ответ будет таким: почему вы хотите кэшировать вывод микропотока?
Объекты уже кешируются в памяти, и клиент браузера обновляет кеш только по указанию. Все объекты, которые вы используете, будут кэшироваться. Также, рассматривая большинство используемых нами микропотоков, я не думаю, что я бы хотел кэшировать вывод вместо повторного запуска микропотоков. Из-за конструкции большинства микропотоков, я думаю, что большинство микропотоков может возвращать немного разные результаты при каждом его выполнении.

Существует множество классов слушателей, на которые вы можете подписаться в платформе Mendix, которые позволяют вам запускать что-то в дополнение к действию по умолчанию. Но это потребовало бы некоторых подробных знаний о текущем поведении.
Например, вы можете переопределить действие входа в систему, но если вы не выполните все правильные проверки, вы можете сделать процесс входа менее безопасным.

Другие вопросы по тегам