Комментарии 5
Это, конечно, всё круто интересно. Но в таких случаях проще составить текст с метками типа "@#$1" и затем использовать String.Replace
Почему? Задача у вас одноразовая. Время на генерацию одного письма даже этим неэффективным методом будет на несколько порядков быстрее отправки самого письма, поэтому затраты незначительны. А код пишется за минуты. Только обязательно протестировать нужно. Массовая рассылка всё же. Кто его знает, что с вами будет, если миллион человек мысленно пошлют вам по капле ненависти.
Почему? Задача у вас одноразовая. Время на генерацию одного письма даже этим неэффективным методом будет на несколько порядков быстрее отправки самого письма, поэтому затраты незначительны. А код пишется за минуты. Только обязательно протестировать нужно. Массовая рассылка всё же. Кто его знает, что с вами будет, если миллион человек мысленно пошлют вам по капле ненависти.
Время на генерацию одного письма даже этим неэффективным методом будет на несколько порядков быстрее отправки самого письма, поэтому затраты незначительны. А код пишется за минуты.
Именно. По-моему, автор построил большую такую пушку, чтобы стрелять по маленьким таким воробьям, и оптимизирует этап, и так занимающий 1% времени всей рассылки.
Во-первых, и это самое главное, я хотел рассказать о динамических функциях и байт-коде. Это только один из примеров, где их можно использовать.
Во-вторых, строковые метки, как выразился автор первого комментария, требуют кода, который будет сопоставлять их со значениями из модели. В шаблонизаторе этого не требуется. Кроме того, можно передать в модель заведомо избыточную информацию (данные о пользователе — порядка 30 параметров, данные о рассылке, данные о системе), а автор шаблона, который вообще говоря не является программистом, сам решит, какие поля ему нужны в шаблоне, а какие нет.
В-третьих, задача не одноразовая. В различных вариантах мне приходилось решать ее и ранее.
Во-вторых, строковые метки, как выразился автор первого комментария, требуют кода, который будет сопоставлять их со значениями из модели. В шаблонизаторе этого не требуется. Кроме того, можно передать в модель заведомо избыточную информацию (данные о пользователе — порядка 30 параметров, данные о рассылке, данные о системе), а автор шаблона, который вообще говоря не является программистом, сам решит, какие поля ему нужны в шаблоне, а какие нет.
В-третьих, задача не одноразовая. В различных вариантах мне приходилось решать ее и ранее.
Почему не использовались Expressions? Особых фич, доступных только в IL, я тут не заметил — а использовать Expressions намного проще...
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Заполнение текстовых шаблонов данными на основе модели. Реализация на .NET с использованием динамических функций в байт-коде (IL)