Допустим вы пишете какую-нибудь систему, одной из функцией которой должна быть рассылка уведомлений/сообщений/e-mail писем для своих пользователей.
И в классе/пакете/модуле ответственным за данную функцию Вам нужно будет на основе каких-то посчитанных, выбранных данных сформировать текст этого шаблонного письма.
Например, Вам нужно уведомить каждого пользователя о том, что его заказ на конкретный товар был успешно выполнен, с его счета снято столько-то денег и произошли все эти знаменательные события такого-то числа и проч. При этом нужно конечно будет деликатно обратится в этом письме к этому пользователю по его ФИО.
Не очень ленивый и обычно не очень опытный программист мог бы написать что-то вроде такого:
// Получаем из базы ФИО, номер заказа, название товара и проч.: $emailContents = 'Добрый день, уважаемый '.$fio.'!'."\n\n"; $emailContents .= 'Уведомляем Вас о том, что Ваш заказ №'.$orderId; $emailContents .= 'на товар '.$itemName.' был успешно выполнен.'."\n"; $emailContents .= 'С Вашего счета была снята сумма в '.$price.'$'."\n"; $emailContents .= 'Дата совершения сделки: '.$date."\n"; $emailObj->SendNotification2User($emailContents);
Программа-то конечно будет отправлять вполне хорошие письма, но вот, во-первых, ее написание довольно утомляет и, во-вторых, если нужно будет модифицировать это содержимое - придется опять лезть в исходный код, изменять его, заново компилировать всю программу/этот модуль (для соответствующих языков).
Более элегантное и правильное решение заключается в использовании текстового шаблона, содержащего все необходимые слова и места для вставки соответсвующих переменных. Одним словом, 1)делаем файл например такого вида(пусть он называется report.txt к примеру):
---------------------------------------------------------------
Добрый день, уважаемый {fio}!
Уведомляем Вас о том, что Ваш заказ №{num} на товар {item} был успешно выполнен.
С Вашего счета была снята сумма в {price}$.
Дата совершения сделки: {date}
---------------------------------------------------------------
2)В программе читаем его содержимое и..
3)Меняем в нем ссылки на поля данных - на значения соответствующих переменных.
В итоге получаем очень простой код:
// Получаем из базы ФИО, номер заказа, название товара и проч.: /* данная php-функция заменит в переменной строке $reportFileContents все элементы первого массива на соответствующие элементы второго массива */ '{num}', '{item}', '{price}', '{date}'), $fio, $orderId, $itemName, $price, $date), $emailContents); $emailObj->SendNotification2User($emailContents);
В итоге мы, во-первых, отделили данные представления от бизнес логики модуля программы, во-вторых, упростили поддержание, модификацию текста данного уведомления, в-третьих, в случае компилируемых языков - таким образом отпадает необходимость повторно компилировать данный фрагмент кода после каких-либо изменений в тексте сообщения.