Разработка сложных Web-приложений на примере Microsoft Active Server Pages

       

Пример разделения монолитной ASP-страницы


Вам, вероятно, интересно будет взглянуть на то, что станет с обычной ASP-страницей, переработанной по описанным методикам.  Вот "притянутый за уши" пример:



Монолитный ASP-файл: showcustomers.asp Разделенные файлы:
<%@Language=JScript%> <html> <head> <title>Customers</title> </head> <body> <% dtBefore = Session("Date_Before"); dtAfter = Request.Cookies("Date_After"); if ((dtBefore==null) (typeof(dtBefore)=="undefined")){ // use default value if empty dtBefore = "01.01.2200"; } if ((dtAfter==null) (typeof(dtAfter)=="undefined")){ // use default value if empty dtAfter= "01.01.1950"; }

%> <h4>All Customers between <%=dtAfter%> and <%=dtBefore%> </h4>

<%

objADOConn = Server.CreateObject("ADODB.Connection");

objADOConn.Open("dsn=DSN_DBSAMPLE;");

rst = objADOConn.Execute(" \ select FIRST_NAME, LAST_NAME   \ from CUSTOMER    \ where REGISTER_DATE <= "+dtBefore+" \ and REGISTER_DATE >= "+dtAfter+" \ order by LAST_NAME, FIRST_NAME \ ");%>

<table><tr><td>First Name</td> <td>Last Name</td></tr> <% while (!rst.EOF) { %> <tr><td><%=rst.Fields("FIRST_NAME").Value%></td> <td><%=rst.Fields("LASE_NAME").Value%></td></tr> <% rst.MoveNext(); } %> </table> <% rst.Close(); objADOConn.Close(); %> </body> </html>

showcustomers.asp
<%@Language=JScript%>

<!--#include file="/libs/Core.inc"-->

<%

dtBefore = Core.getSession().getDate("Date_Before",

"01.01.2200"); // default value if empty

dtAfter = Core.getSession().getDate("Date_After",

"01.01.1950"); // default value if empty

objEM = Core.getEntityManager();

iter = objEM.selectSet("Customer","AllBetweenDates",

dtAfter, dtBefore);

%>

<!--#include file="_t_showcustomers.htm.asp"-->

<%

Core.close();

%>

HTML-шаблон: _t_showcustomers.htm.asp
<html> <head> <title>Customers</title> </head> <body> <h4>All Customers between <%=dfAfter%> and <%=dfBefore%> </h4> <table> <tr><td>First Name</td> <td>Last Name</td></tr>

<% while (!iter.eof()) { %>

tr><td><%=iter.sFirstName%></td> <td><%=iter.sLastName%></td></tr>

<% iter.next(); } %> </table> </body> </html>

SQL-шаблон (INI format): /entities/Customer/select/

AllBetweenDates.ora8

[Params] name=AllBetweenDates type=select entity=Customer INnames=dtAfter,dtBefore INtypes=d,d OUTnames=sFirstName,sLastName OUTtypes=s,s

[SQL] select FIRST_NAME, LAST_NAME    from CUSTOMER            where REGISTER_DATE <= ::dtBefore and REGISTER_DATE >= ::dtAfter order by LAST_NAME, FIRST_NAME

    Допустимо считать, что три простых файла, с явно выделенной функциональностью, поддерживать значительно проще, чем один сложный. Однако, конечно же, все зависит от конкретного проекта и его задач.



Содержание раздела