Глава 14. Типовые решения, предназначенные для представления данных в Web 359
о количестве перебежек и количестве отбитых мечей хранятся в базе данных. Интенсив-
ность перебежек вычисляется приложением — небольшой, но крайне полезный в плане
обучения кусочек логики домена.
В качестве обработчика запросов будем использовать Web-страницу ASP.NET, хра-
нящуюся в файле с расширением .aspx. Как и другие подобные конструкции, данный
файл позволяет внедрять логику домена прямо в код страницы сервера с помощью
скриптлетов. Как вы уже знаете, я скорее выпью плохое пиво, чем стану писать скрипт-
леты. Поэтому воспользуемся механизмом разделения кода и представления (code behind),
который позволяет ассоциировать страницу ASP.NET с обычными классами, указав имя
соответствующего файла в заголовке страницы.
<%@ Page language="c#" Codebehind="bat.aspx.cs"
AutoEventWireup="false" trace="False"
Inherits="batsmen.BattingPage" %>
Данная страница "наследует" класс BattingPage, реализующий логику домена, и по-
тому может использовать все его защищенные свойства и методы. В этом случае объект
страницы является обработчиком запросов, а фактическое выполнение логики домена
будет осуществляться посредством метода Page_Load. Если большинство страниц будут
обрабатывать запросы аналогичным способом, я могу определить супертип слоя (Layer
Supertype, 491) с шаблонным методом Page_Load [20].
class CricketPage...
protected void Page_Load(object sender, System.EventArgs e) {
db = new OleDbConnection(DB.ConnectionString); if
(hasMissingParameters())
errorTransfer (missingParameterMessage);
DataSet ds = getDataO; if (hasNoData (ds))
errorTransfer ("No data matches your request");
applyDomainLogic (ds); DataBindO ; prepareUI(ds); }
Шаблонный метод разбивает обработку запроса на несколько основных этапов.
Это позволяет определить общий принцип обработки Web-запросов и в то же время реа-
лизовать в каждом контроллере страниц собственные варианты выполнения тех или иных
этапов. В этом случае при написании нескольких контроллеров страниц вы будете знать,
какие методы необходимо реализовать для подстановки в шаблонный метод. Если же ка-
кой-то странице понадобится выполнить нечто совершенно другое, она всегда сможет
переопределить метод Page_Load.
Вначале нужно проверить правильность значений параметров, переданных пользова-
телем странице ASP.NET. В реальных приложениях это могло бы потребовать общей
проверки значений на отсутствие тривиальных ошибок, однако в данном случае просто
проанализируем URL вида http://localhost/batsmen/bat.aspx?team=England&
innings=2&match=905 и проверим, присутствуют ли в нем все параметры, необходимые
для выполнения запроса к базе данных. Как обычно, я слишком упрощаю обработку