Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

Использование шаблонов дизайна в ASP.NET

Источник: realcoding.net

[1 страница]

Вступление


Не будем подробно останавливать на самой идее использования шаблонов, считая читателя знакомой с ней (иначе рекомендуем вначале ознакомится с идеями FastTemplate для Perl или PHP, Smarty для PHP).

Под шаблонами понимается не то, что является шаблонами в терминологии .NET, мы рассмотрим достаточно старую и хорошо себя зарекомендовавшую в других языках веб-программирования (PERL, PHP) технологию шаблонов дизайна. Будем называть их в дальнейшем именно так - шаблоны дизайна, чтобы избежать путаницы.

Итак, одной из основных идей шаблонов дизайна является максимально полное разнесение программного кода и его html-представления. Например, когда необходимо вывести приветствие пользователю, подготавливаем шаблон дизайна:

<HTML>
<
BODY>
<
P>Добро пожаловать в систему {{FIRST_NAME}} {{LAST_NAME}}</P>

<
P>Последний раз вы заходили к нам {{LAST_LOGIN_DATE}}</P>
<
P>Сегодня {{NOW_DATE}}</P>
</
BODY>
</
HTML>

и используем его в обработчике шаблонов. Сообщаем обработчику шаблонов файл, содержащий шаблон дизайна, значение переменных (FIRST_NAME, LAST_NAME, :) после чего можен получить от него обработанный шаблон. Обработка может выглядеть, к примеру, так:

MyParserCalss _Parser = new MyParserCalss();
_Parser.OpenTemplate(c:\inetpub\wwwroot\template\templates\template.html);
_Parser.SetVariable ( FIRST_NAME, xxxx);
_Parser.SetVariable ( LAST_NAME, xxxx);
_Parser.SetVariable ( LAST_LOGIN_DATE, 2003-03-02);
_Parser.SetVariable ( LAST_NAME, Sysem.DateTime.Now.ToString());
Response.Write( _Parser.ParseToString() );

В простейшем случае обработка шаблона представляет собой замену всех переменных в его тексте на их значения.

Что дает использование подобного промежуточного слоя помимо потери ресурсов сервера на дополнительную обработку?

Обычно основными преимуществами такого подхода называют следующие:

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

Все эти преимущества являются достаточно значимыми при работе с Perl, PHP или ASP. Действительно, одно разделение кода и представление страницы чего стоит - однажды попробовав применить шаблоны дизайна для этой цели, вы уже не сможете заставить себя вернуться к обычной мешанине кода и элементов дизайна (<колбасе>, как презрительно называют ее некоторые программисты).

С приходом ASP.NET ситуация переменилась - эта технология представляет свои пути решения проблемы разнесения дизайна и кода страницы. Для многих программистов, до этого успешно использовавших технологию шаблонов дизайна, стало очень непростым выбором, что делать дальше - продолжать ее использовать (и тем самым отказаться от многих интересных возможностей в ASP.NET, конфликтующих с шаблонами), или, наоборот, отказаться от шаблонов в пользу новшеств ASP.NET?

Тем не менее, есть области, где применение шаблонов дизайна оправданно и сейчас. Рассмотрим два таких примера таких областей.

Оправка почты


Ваш сайт отправляет письма при регистрации новых пользователей, восстановлении забытого пароля или другие? Без сомнения, ответ - <да>.

Текст письма - это текстовка у которой некоторые элементы - переменные. Применение здесь шаблонов дизайна явно напрашивается.

Что это даст?

  • Тексты писем не будут вкомпилированны в dll сайта - т.е., если нам понадобиться исправить грамматическую ошибку или изменить текст письма, не придется перекомпилировать после этого сайт. Вы просто поправите тестовый файл.
  • Текст писем может изменять кто угодно, не только программист. Это может делать даже сам владелец сайта.
  • Вы можете иметь в своей библиотеке кода готовые обработчики шаблонов дизайна для часто встречающихся письм (например, восстановление пароля) и просто добавлять их в проект, изменения потребуется внести только в текст письма.

Такой подход оказывается в итоге, очень удобен, как в программировании, так и в использовании. Накладные затраты на затраты дополнительных ресурсов сервера пренебрежительно малы (особенно если вы используете оптимизированный обработчик шаблонов, грамотно написанный, кэширующий и т.п.)

Одно содержимое, несколько видов представления


Представьте ситуацию, когда у вас на странице сайта отображается некоторое содержимое (например, аналитический отчет). И это содержимое, помимо простого отображения на странице, нужно, во-первых, уметь представить в оптимизированном для печати виде, во-вторых, уметь экспортировать в Excel. Не знаю, как у вас, а в моей практике такие задачи встречаются постоянно.

По сути дела, имеется один обработчик и три вида представления результатов его работы.

Такая задача очень просто решается применением шаблонов дизайна - вы просто имеете три (4, 5, :) разных шаблона. И если потом вас просят добавить к этой странице еще и ссылку <отослать другу>, это не будет вызывать у вас нервных реакций.

Напишем простой обработчик шаблонов для этой задачи

Простой обработчик шаблонов


Итак, напишем простой обработчик шаблонов дизайна, который будет просто заменять переменные в шаблоне на их значения и ничего больше.

У класса обработчика будет три метода:

  • OpenTemplate - открывает файл, содержащий шаблон дизайна
  • SetVariable - задает значение переменной
  • ParseToString - парсит весь шаблон в строку

Класс очень простой, поэтому просто приведем его код:

///
/// Класс, являющийся обработчиком шаблонов дизайна
///
public class Parser
{
 
///
  /// Тэг-ограничитель переменной (окрывающий)
  ///
 
public const string TagOpen = {{;

 
///
  /// Тэг-ограничитель переменной (окрывающий)
  ///
 
public const string TagClose = }};

 
///
  /// Путь к файлу, содержащему шаблон дизайна
  ///
 
private string TemplateFile = ;

 
///
  /// Здесь мы будем хранить значения пронициализированных переменных
  ///
 
private Hashtable Variables;

 
///
  /// Открываем файл, содержащий шаблон дизайна, попутно проверяя его существование
  ///
  ///
 
public void OpenTemplate ( string TemplateFullPath )
  {
    if (
File.Exists( TemplateFullPath ) )
    {
      
TemplateFile = TemplateFullPath;
    }
    else
    {
      
TemplateFile = ;

      
throw new Exception( String.Format(Parser.OpenTemplate: файл {0} не существует, TemplateFullPath) );
    }
  }

 
///
  /// Установка значения переменной в шаблоне дизайна
  ///
  /// Название переменной
  /// Значение переменной
 
public void SetVariable ( string VariableName, object VariableValue )
  {
   
Variables[ VariableName ] = VariableValue.ToString();
  }

 
public string ParseToString ()
  {
   
StreamReader _SR = new StreamReader( TemplateFile );

   
StringBuilder _SB = new StringBuilder();
       
   
//Пытаемся прочесть содержимое файла шаблона дизайна
   
try
   
{
      
_SB.Append( _SR.ReadToEnd() );
    }
   
catch
   
{
      
//может доступа нет, а может, диск с горячей заменой был...
      
throw;
    }
   
finally
   
{
      
_SR.Close();
    }

      
   
// Заменим все переменные в шаблоне на их значения
   
foreach ( string VariableName in Variables.Keys )
    {
    
_SB.Replace(Template.Parser.TagOpen+VariableName+Template.Parser.TagClose,Variables[VariableName].ToString());
    }

    return
_SB.ToString();
  }

 
///
  /// Конструктор, инициализирует необходимые переменные
  ///
 
public Parser()
  {
   
Variables = new Hashtable();
  }
}



Похожие статьи:
- Как назвать Web-сайт?
- Дядя Гугл — великан
- Создание простого чата на ASP
- Сверхдинамичные веб-интерфейсы
- "Грабим" странички
- Поисковая оптимизация сайта
- Использование шаблонов дизайна в ASP.NET
- BB-коды
- Как узнать по каким запросам находят мой сайт в поисковых машинах?
- Что такое клоакинг?
- Пишем элементарный рассылщик
- И снова отказываемся от модуля CGI?
- Форматируем дату, полученную из БД


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]