Я занимаюсь веб-разработкой уже несколько лет. В разных компаниях у меня разное понимание. Недавно я работал над проектом блога. Я осознал роль классов шаблонов в веб-разработке. Я дома ночью. Я всегда думал, что смогу создать класс-шаблон, специально предназначенный для разработки на asp.ne. Итак, я написал этот шаблонный класс.
Скачать адрес нажмите здесь
Просто переименуйте загруженный файл 500sea.txt в Templet.rar и откройте его.
если открыто
http://img.club.163.com/images/user/other/500sea
Нет запроса на загрузку файла 500sea.txt. Затем с помощью Internet Express и других инструментов загрузите этот адрес и измените загруженный файл 500sea.txt на файл *.rar.
Ниже приведен файл описания внутри
//------------------------------------------------ -------------------------------------------------- --------------------------//
представлять:
Этот класс шаблона написан для разработки веб-сайтов с трехуровневой архитектурой. Компонент StringTempletReplet.dll
Содержит классы шаблонов. Классы шаблонов в пространстве имен StringTempletReplet можно использовать на уровне пользовательского интерфейса или
для использования на логическом уровне.
************************************************* * ***************************
Как запустить:
Создайте виртуальный каталог с именем Templet для ссылки на распакованную папку Templet.
Запустите внутренние RetuenString.aspx, ReturnText.aspx, WriteArticon.aspx,
Страница LongLoop.aspx. Соответствующие инструкции есть в файле cs, соответствующем странице.
При первом открытии страницы объект делегата и файл шаблона должны быть сохранены в кеше, поэтому реальная скорость зависит от первой страницы.
Один раз спустя.
************************************************* * ***************************
Принцип введения:
Шаблон для замены этикетки. Использовала арифметику указателей в C# для поиска местоположения метки.
Используйте объект делегата, чтобы указать на функцию синтаксического анализа, соответствующую тегу изображения, и используйте статические объекты для кэширования всех объектов делегата.
Кэшируйте все содержимое шаблона, не меняя тело шаблона. Шаблоны можно изменять динамически.
************************************************* * ***************************
Введение тега:
Содержимое между парой специальных символов {$ и $} является меткой.
нравиться
{$Имя тега:Параметр 1:Параметр 2:Параметр 3::Символ 10$}
{$tagname:параметр1:параметр2::байт10$}
{$dt[5][имя]$}
Метка разделена на две части (часть параметра метки) и (часть управления командой) посредством символа :: внутри метки.
{$tagname:параметр1:параметр2:параметр3::байт10$}
(Часть параметра тега) :: (Часть управления командой)
В этих двух частях разделите часть параметра метки и часть управления командой знаком :.
Часть параметра тега: первая — это имя тега, которое соответствует имени функции синтаксического анализа тега, а последующие — параметры функции.
Функция анализа тегов принимает все типы параметров как строковые, а количество параметров составляет 0–20.
Функция, тип возвращаемого значения — строковый тип. Параметры могут быть жестко запрограммированы на этикетке или записаны динамически.
Часть управления командой — теперь есть только два символа и байта командного символа, за которыми следует числовой параметр, указывающий стандарт перехвата.
Длина результата анализа подписи, например 10 символов и 10 байтов.
В будущем я буду расширять другие символы управления и контроля.
Соответствие между метками и функциями смотрите в инструкциях в файле Business.cs.
Конкретные правила использования тегов см. в инструкциях в файле template/templet/aa1.htm.
Конкретные правила вызовов см. на трех страницах aspx проекта.
WriteArticon.aspx — система новостей, которая считывает шаблоны и анализирует записанные файлы для создания статических страниц.
ReturnText.aspx — чтение строк синтаксического анализа шаблона и возврата, используемых для написания страниц, которым часто требуется изменить свой внешний вид.
Страница со шкурой. Шаблоны можно изменять динамически.
RetuenString.aspx — принимает строки тегов и возвращает результаты анализа. Обычно используется с ajax.
************************************************* * ******************************
Динамическое значение метки:
Функция анализа тега может принимать фиксированные параметры, передаваемые в теге. Существует три способа принятия динамических параметров.
После передачи объектов Datatable и Hashtable в класс шаблона
(Таблица данных получается из уровня данных, хэш-таблица обычно представляет собой переменные страницы и другие переменные)
1. dt[5][имя] ---- означает получение значения в столбце имени из 5 строк в таблице данных, первая из которых — число,
Второе — имя столбца
2. dt[name] ---- Вне цикла это означает получение значения из столбца имени строки 0 в таблице данных.
Один параметр представляет имя столбца.
---- В цикле это означает получение значения из столбца имени в таблице данных, возьмите это
Эти строки определяются параметрами тега цикла.
3. page[PageId] ----- Представляет получение значения ключа PageId в объекте Hashtable и возврат строкового типа.
Например, {$two параметра bookmarks:dt[3][word]:page[UserId]::character 10$}
{$dt[5][name]$} {$dt[name]$} {$page[ Идентификатор страницы ]$}
или
{$dt[5][имя]::Символ 10$} {$dt[имя]::Символ 10$} {$page[PageId]::Символ 10$}
Такой тег указывает на то, что значение в объекте отображается непосредственно на странице.
************************************************* * ***************************
Вызовите метод класса шаблона на странице или в классе:
Можно вызвать внутри страницы или класса.
Генерируйте объекты и связывайте соответствующие классы анализа функций тегов.
//Здесь нам просто нужно добавить объект бизнес-класса после этой строки new Business()
//При использовании интерфейсов для реализации полиморфизма код выглядит немного громоздко. Когда вы используете его самостоятельно, просто измените последний «new Business()» на свой собственный класс, содержащий функцию анализа тегов.
ILabelAnalyStart objILabel=(ILabelAnalyStart) new TempletReplet(new Business());
//Чтение атрибута пути шаблона
objILabel.ReadFilePath=this.Server.MapPath("templet/aa1.htm");
//Записываем атрибут пути к файлу
objILabel.WritFilePath=this.Server.MapPath("page/aa1.html");
//Получаем объект таблицы данных
objILabel.LabelDatatable=ds.Tables[0]
//Передаем переменные на этой странице в класс шаблона, используя объекты Hashtable
objILabel.LabelHashtable=ht
Тогда можно добиться трех замен
;
//Начинаем замену и написание шаблона
objILabel.LaberReplet();
//возвращаем результат анализа
строка aa=objILabel.LaberRepletText();
//Возвращаем результат анализа. Это напрямую принимает строку шаблона. Подробности см. в файле RetuenString.cs.
string aa=objILabel.LaberRepletString()
Более подробную информацию можно найти в файлах cs этих трех файлов
;
WriteArticon.aspx — система новостей, которая считывает шаблоны и анализирует записанные файлы для создания статических страниц.
ReturnText.aspx — прочитайте анализ шаблона, чтобы вернуть строку, и используйте ее для написания страниц, которые часто меняют свой внешний вид.
Страница смены скина
RetuenString.aspx — принимает строки тегов и возвращает результаты анализа. Обычно используется с ajax
********************************************** *** *******************************
Ассоциация функции метки:
Подробности смотрите в файле Business.cs.
В статический конструктор класса, соответствующего логическому слою, добавьте следующий код.
//Вызываем статический конструктор и помещаем делегат функции выполнения тега в статическую хеш-таблицу
//Этот метод должен быть выполнен
статический Бизнес()
{
Business _this=new Business();
FunctionList.objFunctionHashtable.Add("Закладка без параметров",new KeyItemDelegate(new UserDelegate.Run_0(_this.show),0));
FunctionList.objFunctionHashtable.Add("Закладка с одним параметром",new KeyItemDelegate(новый UserDelegate.Run_1(_this.tag),1));
FunctionList.objFunctionHashtable.Add("Две закладки параметров",new KeyItemDelegate(new UserDelegate.Run_2(_this.tag_two),2));
//Закладки связаны с функциями выполнения. Поместите его в статический конструктор класса анализа закладок. Это позволяет полностью использовать объекты в памяти, не выполняя их каждый раз.
// Символ «закладка параметра» соответствует функции тега публичной строки (строка aa). Соответствующий режим — добавление ключа и значения в хеш-таблицу.
// ("Закладка параметра",new KeyItemDelegate(new UserDelegate.Run_1(_this.tag),1));
// имя тега |
// Используйте делегат Run_1 для одного параметра. |
// Соответствующая функция выполнения тега |
// Для одного параметра пишем цифру один
// 0 или более соответствующих примеров выше
}
Подробности смотрите в файле Business.cs
******************************************* * **********************************
Введение в цикл внутри тегов:
Невложенные циклы можно реализовать с помощью специальных символов внутри тега.
//------------------------------------------------ --------------------------
{$loop(3,0,alter)$} //Отображаем три строки, начиная со строки 0. Если есть чередующиеся столбцы, запускаем чередующиеся столбцы.
{$BlockItem$} //строка цикла по умолчанию,
<td bgcolor="#33ccff">Название:{$dt[5][name]$}, Автор:{$Один параметр:dt[dddf]$}</td>
{$/BlockItem$}
{$BlockAlterItem$} // Поочередный цикл строк. Если нет пары меток строк по умолчанию, существует альтернативная пара меток цикла. Рассматривайте переменную пару меток как пару меток строк по умолчанию.
<td bgcolor="#ff6699">Название:{$dt[5][name]$}, автор:{$один параметр:dt[dddf]$}</td>
{$/BlockAlterItem$}
{$BlockPatch$} //Когда количество строк, подлежащих зацикливанию, превышает количество строк в таблице данных, используйте содержимое здесь, чтобы дополнить отображение. Если нет «дополнительной» пары тегов. Затем, когда количество отображаемых строк превышает количество строк в таблице данных, будет отображаться только количество строк в таблице данных.
<td bgcolor="#33ccff">Дополнение (теги также можно использовать внутри)</td>
{$/BlockPatch$}
{$BlockAlterPatch$} //Дополнительной пары меток нет, но есть альтернативные пары дополнительных меток. рассматривать чередующиеся дополнительные пары тегов как дополнительные пары тегов
<td bgcolor="#ff6699">Альтернативное дополнение (теги также можно использовать внутри)</td>
{$/BlockAlterPatch$}
{$/loop$} //конец цикла
//------------------------------------------------ ---------------
{$BlockItem$} {$/BlockItem$}: пара меток циклической строки по умолчанию.
{$BlockAlterItem$} {$/BlockAlterItem$} : попеременный цикл пар меток строк.
{$BlockPatch$} {$/BlockPatch$}: пара меток дополнительной линии по умолчанию.
{$BlockAlterPatch$} {$/BlockAlterPatch$}: поочередное дополнение пар меток строк
//------------------------------- -- -----------------------
Если у вас есть только строка цикла по умолчанию, вы не можете добавить пару тегов {$BlockItem$}.
нравиться
{$loop(3,0,alter)$}
<tr><td>{$function tag$}</td></tr>
{$/цикл$}
и
{$loop(3,0,alter)$}
{$BlockItem$}<tr><td>{$метка функции$}</td></tr>{$/BlockItem$}
{$/цикл$}
значит тот же эффект
//------------------------------------------------ -------------
{$loop(3,0,alter)$}
{$BlockAlterPatch$}
<tr><td>{$function tag$}</td></tr>
{$/BlockAlterPatch$}
{$/цикл$}
Если имеются только пары меток строк чередующегося цикла и нет пары меток строк цикла по умолчанию, то пара меток строк чередующегося цикла автоматически преобразуется в
Пары меток линий контура по умолчанию
//------------------------------------------------ ---------------
{$loop(3,0,alter)$}
{$BlockAlterPatch$}
<tr><td>{$function tag$}</td></tr>
{$/BlockAlterPatch$}
{$/цикл$}
Если имеются только чередующиеся пары меток дополнительных линий и нет пары меток дополнительных линий по умолчанию, то пары чередующихся меток дополнительных линий автоматически преобразуются в
Пары меток линий контура по умолчанию
************************************************* * **********************
Описание параметров цикла:
{$loop(3,0,alter)$}
В цикле есть три параметра, которые можно соответствующим образом уменьшить.
Первый параметр:
3: Повторить 3 раза, ни в коем случае не повторять все
Второй параметр:
2: Начать с 2, не означает начать с 0
Третий параметр:
изменить: альтернативный
noalter: без чередования. Если указание отсутствует, по умолчанию используется чередование, поэтому независимо от того, добавлено чередование или нет.
Если все три параметра опущены, необходимо сохранить хотя бы пару пустых скобок {$loop()$}.
Представляет количество строк в цикле Datatable.
Начиная со строки 0, если есть дополнение, оно будет отображаться.
************************************************* * *************************
Вышло обновление. В основном цикл оптимизации.
Теперь циклическое перебор таблицы с 50 000 строк занимает 300–400 миллисекунд.
************************************************* * *************************
Рекомендуется, чтобы размер шаблона не превышал 85 КБ, и будьте осторожны, чтобы он не стал объектом большого размера. Рекомендуется, чтобы количество шаблонов страниц для объектов второго поколения было меньше или равно 919, а количество соответствующих тегов функций не превышало 1597.
Приятно видеть, что класс шаблонов растет вместе с моим собственным пониманием.
************************************************* * ***************************