Вынесение цельной HTML-страницы в отдельный файл
Учитывая недостатки вышеперечисленных способов, можно предложить следующее решение. Разделим ASP-файл на 2 файла. Первый будет содержать только ASP-код и никаких посылок результатов клиенту. В этом файле должно полностью отсутствовать
HTML-форматирование. Файл будет включать в себя (SSI) второй файл, который будет цельной HTML-страницей с минимальным количеством четко выделенного ASP-кода. Второй файл, по сути, будет тем же HTML-шаблоном, только вместо, например "[header]" будет написано "<%=obj.getHeader()%>", что не затруднит работу дизайнера. Но в нем также будет возможность выводить более сложные программные структуры. Идея в том, чтобы код во втором файле (где HTML) был действительно минимален и четко выделен. Т.е. все крупные куски кода инкапсулируются в функции и объекты, которые создаются в первом файле (чистый ASP-скрипт). Второй файл (HTML) лишь запускает эти функции и методы объектов. В этом плане JavaScript дает несомненные преимущества. Не пожалейте часа-двух, и изучите разные способы создания объектов в JavaScript - это позволит вам создавать удивительно красивые по своей простоте и логике архитектурные конструкции.
Общая схема разделения ASP/HTML | |
file1.asp | file2.htm.asp |
Business Logic Level: Чтение/Обработка данных. Создание объектов (например объекта objExample), которые будет использовать Файл #2 (file2.htm.asp). |
<html>... <h1><%=objExample.getHeader()%></h1> <% while (!objExample.eof()) { %> Text: <%=objExample.getText()%> <% objExample.next(); } %> ...</html> |
Presentation Level: <!--#include file="file2.htm.asp"--> |
|
Finalization Level: Закрытие DB-connections, etc. |
Отметим также, что в случае перехода на JSP, такой HTML-шаблон можно совсем не менять.
Сформулируем основные принципы вышеописанного подхода:
и _t_shopinfo.htm.asp.
К побочным эффектам подобного разделения можно отнести достаточно простую возможность поддержки генерации не-HTML страниц. Например - WAP или XML. Для этого надо только написать другой файл шаблона (файл #2). Файл с серверным скриптом (#1) останется тем же.
Теперь остановимся еще на двух часто встречающихся деталях.