WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     | 1 | 2 || 4 | 5 |

namespace CMC.SDT.Library { public class NHibernateHelper { private const string CurrentSessionKey = "nhibernate.current_session";

private static readonly ISessionFactory sessionFactory;

static NHibernateHelper() { sessionFactory = new Configuration().Configure().AddFile("library.hbm.xml").BuildSessionFactory();

} public static ISession GetCurrentSession() { HttpContext context = HttpContext.Current;

ISession currentSession;

if(context == null) { currentSession = sessionFactory.OpenSession();

} else { currentSession = context.Items[CurrentSessionKey] as ISession;

if (currentSession == null) { currentSession = sessionFactory.OpenSession();

context.Items[CurrentSessionKey] = currentSession;

} } return currentSession;

} public static void CloseSession() { HttpContext context = HttpContext.Current;

if(context == null) { return;

} ISession currentSession = context.Items[CurrentSessionKey] as ISession;

if (currentSession == null) { // No current session return;

} currentSession.Close();

context.Items.Remove(CurrentSessionKey);

} public static void CloseSessionFactory() { if (sessionFactory != null) { sessionFactory.Close();

} } } } Приложение 5.

Пример архитектуры пользовательского интерфейса приложения.

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

Одна форма используется для навигации по БД книг и одна форма — для ее редактирования. Доступ ко второй форме предоставляется только пользователям, указанным в таблице PrivilegedUser, по указанному там же паролю. Для аутентификации пользователей используется дополнительная форма. Эта архитектура интерфейса приложения изображена на Рис. 5.

Браузер Интернет Форма просмотра данных о книгах (возможности поиска) Форма аутентификации пользователей Форма редактирования данных о книгах (с использованием имеющейся информации об авторах и издательствах) Защищенная область — доступна только для привилегированных пользователей Рисунок 5. Возможная архитектура пользовательского интерфейса приложения.

Приложение 6.

Пример проекта форм приложения.

Ниже приведен проект форм приложения для архитектуры пользовательского интерфейса, представленной на Рис. 5. В рамках этой архитектуры имеется три формы.

Форма просмотра информации о книгах Рисунок 6. Форма просмотра информации о книгах.

Эта форма — основная форма приложения. Она содержит заголовок-название приложения и набор информационных элементов для представления данных о книгах — фамилии и имени автора, названия книги названия издательства, ISBN книги и года издания. Форма может содержать информацию о нескольких книгах, поэтому для каждого из этих полей отводится список. Фамилия и имя автора комбинируются в одну запись в соответствующем списке.

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

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

Замечание. Если БД содержит много (>100) записей о книгах и авторах, необходимо разработать другой интерфейс для поиска по авторам и названиям книг. Варианты — поиск по первой букве или нескольким первым буквам фамилии автора или названия книги, или отдельные станицы для представления списков книг, чье название начинается на данную букву, и отдельные страницы для списков книг авторов, чья фамилия начинается на данную букву.

При выделении одной из книг, информация о которых представлена в списках, выделяются все соответствующие записи во всех списках. Кроме того, становятся доступны ссылка на страницу данной книги в одном из Интернет-магазинов и ссылка на форму редактирования информации.

Имеется две ссылки, ведущие на форму редактирования информации о книгах. Первая всегда доступна и приводит (после аутентификации) к открытию пустой формы, с помощью которой можно добавить информацию о новой книге. Вторая доступна, только когда выделена информация о некоторой книге, и ведет на форму, заполненную уже имеющейся в БД информацией об этой книге. С ее помощью можно эту информацию изменить.

Форма аутентификации привилегированных пользователей Рисунок 7. Форма аутентификации.

Форма аутентификации содержит два поля для ввода имени пользователя и пароля и кнопку, запускающую процедуру аутентификации. При неудачной аутентификации снизу от кнопки появляется сообщение о том, что либо пользователь системе неизвестен, либо пароль введен неправильно. После 5-й неуспешной попытки аутентификации, нажатие на эту кнопку переводит на основную форму приложения. При успешной аутентификации открывается форма редактирования информации о книгах, пустая или заполненная данными выделенной книги.

Форма редактирования информации о книгах Рисунок 8. Форма редактирования информации о книгах.

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

Значение, выбранное в выпадающем списке Number of authors, определяет число однотипных групп полей для данных об авторе, показанных внизу формы. Это число изменяется от 1 до 10.

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

Производятся следующие проверки корректности введенных данных.

• Должно быть введено непустое название книги.

• Должно быть указано издательство.

• Должен быть указано хотя бы один автор. Для указания автора должна быть определена его фамилия. Число указанных авторов должно совпадать с числом авторов, указанным в поле Number of authors.

• Размеры всех строк, указанных в качестве значений полей, не должны превосходить максимально возможные размеры соответствующих полей БД.

• Поле ISBN должно быть пусто или в нем должно быть ровно 10 символов, из которых все, кроме последнего — цифры, а последний — цифра или буква ‘X’.

• В качестве года издания должно быть введено целое положительное число или же это поле должно быть пусто.

При нажатии в любой момент на ссылку Cancel происходит сброс всех введенных данных и переключение на основную форму приложения.

При нажатии на ссылку Save происходит запись введенных данных, если они корректны, в БД приложения. В качестве активной остается эта же форма, все данные во всех полях сохраняются.

Приложение 7.

Пример конфигурационных файлов и кода форм приложения.

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

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

Рисунок 9. Размещение файлов проекта.

Для основной директории приложения автоматически созданный в среде Microsoft Visual Studio конфигурационный файл был исправлен в двух местах.

Первое исправление предназначено для подключения среды NHibernate и задействованных в ее работе драйверов СУБД. Ниже представлен вариант (начало) кода конфигурационного файла, в котором описано использование СУБД MySQL.

NHibernate.Dialect.MySQLDialect NHibernate.Connection.DriverConnectionProvider NHibernate.Driver.MySqlDataDriver Server=localhost;Database=library;User ID=root;Password=troot;Pooling=false ...

Второе исправление указывает используемый механизм аутентификации (формы) и его параметры (форму аутентификации, название cookie, сохраняемого на компьютере клиента, чтобы не проходить аутентификацию слишком часто, и время действия сохраненного cookie).

...

...

В конфигурационном файле директории SECURE нужно указать только запрет доступа для анонимных пользователей. Ниже приведен код этого файла целиком.

Основная форма приложения На Рис. 10 можно увидеть ее в графическом редакторе Web-форм в Microsoft Visual Studio.

Рисунок 10. Форма просмотра информации о книгах в редакторе форм.

Соответствующий код HTML-страницы представлен ниже.

<%@ Page language="c#" Codebehind="MainForm.aspx.cs" AutoEventWireup="false" Inherits="CMC.SDT.Library.MainForm" smartNavigation="True"%> 3 Лабораторная работа 1 Данный документ является описанием лабораторной работы 1 к курсу «Технологии программирования. Компонентный подход». Задача этой лабораторной работы —

Library Navigator

absolute; TOP: 56px" runat="server" Height="24px" Width="136px">Author

POSITION: absolute; TOP: 80px" runat="server" Height="16px" Width="160px" AutoPostBack="True">

POSITION: absolute; TOP: 104px" runat="server" Height="152px" Width="160px" AutoPostBack="True">

absolute; TOP: 56px" runat="server" Height="24px" Width="161px">Book Title

POSITION: absolute; TOP: 80px" tabIndex="1" runat="server" Height="24px" Width="337px" AutoPostBack="True">

POSITION: absolute; TOP: 104px" tabIndex="2" runat="server" Height="152px" Width="336px" AutoPostBack="True">

absolute; TOP: 56px" runat="server" Height="24px" Width="120px">Publisher

POSITION: absolute; TOP: 104px" runat="server" Height="160px" Width="152px" AutoPostBack="True">

absolute; TOP: 56px" runat="server" Height="24px" Width="88px">ISBN

POSITION: absolute; TOP: 104px" runat="server" Height="152px" Width="112px" AutoPostBack="True">

absolute; TOP: 56px" runat="server" Height="24px" Width="32px">Year

POSITION: absolute; TOP: 104px" runat="server" Height="152px" Width="56px" AutoPostBack="True">

absolute; TOP: 272px" runat="server" Width="64px" NavigateUrl= "secure/EditForm.aspx">Add new

POSITION: absolute; TOP: 272px" runat="server" Width="40px" Enabled="False" >Edit

absolute; TOP: 272px" runat="server" Height="24px" Width="88px" Enabled="False">Link

Пример кода вспомогательного класса MainForm, реализующего обработку действий пользователя на основной форме приложения, представлен ниже.

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

using NHibernate;

namespace CMC.SDT.Library { ///

/// Summary description for WebForm1.

///

public class MainForm : System.Web.UI.Page { protected System.Web.UI.WebControls.Label Label1;

protected System.Web.UI.WebControls.Label Label2;

protected System.Web.UI.WebControls.Label Label3;

protected System.Web.UI.WebControls.Label Label4;

protected System.Web.UI.WebControls.Label Label5;

protected System.Web.UI.WebControls.DropDownList authorList;

protected System.Web.UI.WebControls.ListBox authorListBox;

protected System.Web.UI.WebControls.ListBox titleListBox;

protected System.Web.UI.WebControls.ListBox publisherListBox;

protected System.Web.UI.WebControls.ListBox ISBNListBox;

protected System.Web.UI.WebControls.ListBox yearListBox;

protected System.Web.UI.WebControls.HyperLink getLink;

protected System.Web.UI.WebControls.HyperLink addLink;

protected System.Web.UI.WebControls.HyperLink editLink;

protected System.Web.UI.WebControls.DropDownList titleList;

private void Page_Load(object sender, System.EventArgs e) { // Put user code to initialize the page here if(authorList.Items.Count == 0) { authorList.Items.Insert(0, "*");

titleList.Items.Insert(0, "*");

ISession session = NHibernateHelper.GetCurrentSession();

ITransaction tx = session.BeginTransaction();

IQuery authorQuery = session.CreateQuery ("select a from Author as a order by a.Surname");

IQuery bookQuery = session.CreateQuery ("select b from Book as b order by b.Title");

ListItem item;

foreach(Author a in authorQuery.Enumerable()) { item = new ListItem(a.Surname + ", " + a.FirstName, a.ID.ToString());

authorList.Items.Add(item);

} foreach(Book b in bookQuery.Enumerable()) { item = new ListItem(b.Title, b.ID.ToString());

titleList.Items.Add(item);

Pages:     | 1 | 2 || 4 | 5 |






















© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.