Я использую NVelocity в своем приложении для генерации html-писем. У моего приложения есть модель, управляемая событиями, где сохранение и / или обновление объектов приводит к отправке этих электронных писем. Каждое событие может вызвать ноль, одно или несколько сообщений электронной почты.
Я хочу иметь возможность настроить, какие электронные письма будут отправляться во время выполнения, без необходимости изменения кода. Я думал, что мог бы использовать директиву NVelocity #if (), чтобы сделать это. Вот моя идея ...
Шаг 1) Перед отправкой электронной почты администратор должен настроить формулу для оценки NVelocity. Например:
$User.FirstName == "Jack"
Шаг 2) Когда объект сохранен или создан, создайте шаблон NVelocity в памяти на основе формулы ввода. Например:
String formula = GetFormulaFromDB(); // $User.FirstName == "Jack"
String templ = "#if( " + formula + ") 1 #else 0 #end";
Шаг 3) Запустите движок NVelocity в памяти для шаблона. Проверьте результаты, чтобы увидеть, если мы должны отправить электронное письмо:
String result = VelocityMerge(templ); // utility function
if( result.Trim() == "1" )
{
SendEmail();
}
Я знаю, что это не совсем то, для чего предназначалась NVelocity, но я думаю, что это может сработать :) Одно из преимуществ такой работы заключается в том, что для формулы можно использовать тот же синтаксис, что и внутри шаблон.
Есть ли у кого-нибудь слова предостережения или предложения? Есть ли способ выполнить директиву #if (), не перепрыгивая через обручи, как у меня выше? Есть ли рекомендуемый способ заблаговременной проверки синтаксиса формулы?
Спасибо.