WWW.DISSERS.RU

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

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


Pages:     | 1 || 3 | 4 |   ...   | 5 |

БД приложения должна содержать все атрибуты книг, доступные через пользовательский интерфейс, и размещаться в одной из широко используемых реляционных СУБД: MS SQL Server, Oracle, MySQL, и т.п.

Взаимодействие приложения с БД должно быть реализовано на базе среды интеграции NHibernate.

Возможные вопросы по требованиям к разрабатываемому приложению таковы.

1. Каковы функциональные требования к приложению Какие задачи оно должно решать 2. С какими данными приложение должно работать Как они должны быть организованы 3. Каковы требования к защите данных Какие роли определяются в требованиях к приложению и какие права им предоставляются Приложение 2.

Примеры определения архитектуры приложения.

Возможный вариант многоуровневой архитектуры приложения изображен на Рис. 2.

Клиентская часть интерфейса пользователя (Web-браузер) Серверные компоненты интерфейса пользователя (Web-формы ASP.NET и HTML-страницы) Компоненты модели данных приложения (Классы основных хранимых сущностей) Среда интеграции модели данных и БД (NHibernate) БД приложения (в рамках одной из реляционных СУБД) Рисунок 2. Архитектура разрабатываемого приложения. Цветом выделены уже существующие компоненты, которые не нужно разрабатывать или модифицировать.

При использовании этого варианта в качестве выделенных цветом компонентов берутся уже существующие компоненты, интерфейс взаимодействия Web-браузера с компонентами ASP.NET поддерживается средой.NET, компоненты модели данных определяют собственный интерфейс для работы с данными, их взаимодействие со средой интеграции NHibernate и ее взаимодействие с СУБД поддерживается самой средой NHibernate.

Варианты определения интерфейса компонентов модели данных.

1. Первый вариант. Минимальный интерфейс, при помощи которого можно только читать и изменять значения полей.

Определяются классы Author, Book и Publisher, представляющие данные об авторах, книгах и издательствах. Для каждого поля данных в них определяются методы get и set.

2. Второй вариант. Расширенный интерфейс.

Так же, как в предыдущем случае, определяются классы Author, Book и Publisher, методы get и set для всех полей данных. Кроме этого, выделяются используемые в компонентах ASP.NET запросы к данным — для этого, однако, надо достаточно детально представить реализацию этих компонентов. Примеры таких запросов:

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

Варианты определения схемы защиты данных приложения.

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

Администратор может добавлять и удалять привилегированных пользователей, определяя их учетные записи (login) и пароли.

Во всех предлагаемых вариантах для реализации защиты приложения используются встроенные механизмы ASP.NET.

Возможные способы определения привилегированных пользователей могут различаться.

1. У администратора нет специального пользовательского интерфейса. Список привилегированных пользователей с их именами и паролями хранится в БД приложения в особой таблице. При необходимости администратор изменяет его напрямую при помощи инструментов администрирования СУБД или выполнения SQL-скриптов.

2. У администратора нет специального пользовательского интерфейса. Список привилегированных пользователей с их именами и паролями содержится в конфигурационном файле приложения. При необходимости администратор изменяет его напрямую, редактируя конфигурационный файл на Web-сервере.

3. У администратора есть специальный интерфейс, доступ к которому возможен только после аутентификации — указания учетной записи (login) и пароля администратора. Список привилегированных пользователей с их именами и паролями хранится в БД приложения в особой таблице. Администратор изменяет его при помощи этого специализированного интерфейса.

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

Пример схемы БД приложения и SQL-скриптов для ее создания.

Вариант определения схемы БД приложения с использованием специальной таблицы для хранения имен и паролей привилегированных пользователей приведен на Рис. 3.

Соответствующий код на SQL, создающий такую БД в рамках СУБД MySQL 5.0, приведен ниже.

Другие варианты схемы БД:

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

2. Все то же самое, но связь между таблицами Book и Publisher имеет тип «многие-ко многим». В этом случае должна появиться дополнительная таблица BookPublishers с двумя полями-ссылками на первичные ключи Book и Publisher. В таблице Book при этом отсутствует поле PublisherID.

Рисунок 3. Примерная схема БД приложения.

Следующий скрипт создает БД в соответствии со схемой, изображенной на Рис. 3.

/* Create schema library */ CREATE DATABASE IF NOT EXISTS library;

USE library;

/* Definition of table `library`.`author` */ DROP TABLE IF EXISTS `library`.`author`;

CREATE TABLE `library`.`author` ( `AuthorID` int unsigned NOT NULL default '0', `Surname` varchar(50) NOT NULL default '', `FirstName` varchar(50) default NULL, `RestNames` varchar(255) default NULL, PRIMARY KEY (`AuthorID`), KEY `Authors` (`Surname`) ) DEFAULT CHARSET=utf8;

/* Definition of table `library`.`publisher` */ DROP TABLE IF EXISTS `library`.`publisher`;

CREATE TABLE `library`.`publisher` ( `PublisherID` int unsigned NOT NULL default '0', `Title` varchar(255) NOT NULL default '', PRIMARY KEY (`PublisherID`), KEY `Publishers` (`Title`) ) DEFAULT CHARSET=utf8;

/* Definition of table `library`.`book` */ DROP TABLE IF EXISTS `library`.`book`;

CREATE TABLE `library`.`book` ( `BookID` int unsigned NOT NULL default '0', `Title` varchar(255) NOT NULL default '', `ISBN` varchar(10) default NULL, `Year` int unsigned default NULL, `Link` varchar(500) default NULL, `PublisherID` int unsigned default NULL, PRIMARY KEY (`BookID`), KEY `Books` (`Title`), KEY `PublisherID` (`PublisherID`), CONSTRAINT `PublisherID` FOREIGN KEY (`PublisherID`) REFERENCES `publisher` (`PublisherID`) ON DELETE SET NULL ) DEFAULT CHARSET=utf8;

/* Definition of table `library`.`bookauthors` */ DROP TABLE IF EXISTS `library`.`bookauthors`;

CREATE TABLE `library`.`bookauthors` ( `AuthorID` int unsigned NOT NULL, `BookID` int unsigned NOT NULL, PRIMARY KEY (`BookID`,`AuthorID`), KEY `AuthorBooks` (`BookID`), KEY `BookAuthors` (`AuthorID`), CONSTRAINT `AuthorBooks` FOREIGN KEY (`BookID`) REFERENCES `book` (`BookID`) ON DELETE CASCADE, CONSTRAINT `BookAuthors` FOREIGN KEY (`AuthorID`) REFERENCES `author` (`AuthorID`) ON DELETE CASCADE ) DEFAULT CHARSET=utf8;

/* Definition of table `library`.`privilegeduser` */ DROP TABLE IF EXISTS `library`.`privilegeduser`;

CREATE TABLE `library`.`privilegeduser` ( `UserID` int unsigned NOT NULL default '0', `Login` varchar(50) NOT NULL, `Password` varchar(255) NOT NULL, PRIMARY KEY (`UserID`) ) DEFAULT CHARSET=utf8;

Замечание. При использовании таблиц формата MyISAM (действует по умолчанию) определенные ограничения ссылочной целостности не контролируются MySQL. Для включения автоматической проверки ссылочной целостности надо использовать таблицы формата InnoDB.

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

INSERT INTO `library`.`author` ( `AuthorID`, `Surname`, `FirstName` ) VALUES ( 1, 'Somerville', 'Ian' ), ( 2, 'Booch', 'Grady' ), ( 3, 'Rumbaugh', 'James' ), ( 4, 'Jacobson', 'Ivar' ), ( 5, 'Tanenbaum', 'Andrew' ), ( 6, 'van Steen', 'Maarten' ), ( 7, 'Bass', 'Len' ), ( 8, 'Clements', 'Paul' ), ( 9, 'Kazman', 'Rick' ), ( 10, 'Klein', 'Mark' ), ( 11, 'Royce', 'Walker' ), ( 12, 'Beck', 'Kent' ), ( 13, 'Fowler', 'Martin' ), ( 14, 'Szyperski', 'Clemens' );

INSERT INTO `library`.`publisher` ( `PublisherID`, `Title` ) VALUES ( 1, 'Addison-Wesley' ), ( 2, 'Prentice Hall' );

INSERT INTO `library`.`book` ( `BookID`, `ISBN`, `Year`, `PublisherID`, `Title`, `Link` ) VALUES ( 1, '0805353402', 1994, 1, 'Object-Oriented Analysis and Design with Applications', 'http://www.amazon.com/Object-Oriented-Analysis-DesignApplications-2nd/dp/0805353402' ), ( 2, '0321267974', 2005, 1, 'Unified Modeling Language User Guide', 'http://www.amazon.com/Unified-Modeling-Language-User-Guide/dp/0201571684' ), ( 3, '0321245628', 2005, 1, 'Unified Modeling Language Reference Manual', 'http://www.amazon.com/Modeling-Language-Reference-Addison-WesleyTechnology/dp/0321245628' ), ( 4, '0201571692', 1999, 1, 'The Unified Software Development Process', 'http://www.amazon.com/Unified-Software-Development-Process/dp/0201571692' ), ( 5, '0321210263', 2004, 1, 'Software Engineering', 'http://www.amazon.com/Software-Engineering-International-ComputerScience/dp/0321210263' ), ( 6, '0130661023', 2003, 2, 'Computer Networks', 'http://www.amazon.com/Computer-Networks-Fourth-AndrewTanenbaum/dp/0130661023' ), ( 7, '0130888931', 2002, 2, 'Distributed Systems: Principles and Paradigms', 'http://www.amazon.com/Distributed-Systems-Principles-AndrewTanenbaum/dp/0130888931' ), ( 8, '0130313580', 2001, 2, 'Modern Operating Systems', 'http://www.amazon.com/Modern-Operating-Systems-AndrewTanenbaum/dp/0130313580' ), ( 9, '0805305947', 1996, 1, 'Object Solutions: Managing the Object-Oriented Project', 'http://www.amazon.com/Object-Solutions-Managing-Object-OrientedProject/dp/0805305947' ), ( 10, '0321154959', 2003, 1, 'Software Architecture in Practice', 'http://www.amazon.com/Software-Architecture-Practice-SecondBass/dp/0321154959' ), ( 11, '020170482X', 2001, 1, 'Evaluating Software Architectures: Methods and Case Studies', 'http://www.amazon.com/Evaluating-Software-ArchitecturesMethods-Studies/dp/020170482X' ), ( 12, '0201309580', 1998, 1, 'Software Project Management: A Unified Framework', 'http://www.amazon.com/Software-Project-Management-UnifiedFramework/dp/0201309580' ), ( 13, '0201710919', 2000, 1, 'Planning Extreme Programming', 'http://www.amazon.com/Planning-Extreme-Programming-Kent-Beck/dp/0201710919' ), ( 14, '0201895420', 1996, 1, 'Analysis Patterns: Reusable Object Models', 'http://www.amazon.com/Analysis-Patterns-Reusable-Object-OrientedEngineering/dp/0201895420' ), ( 15, '0201745720', 2002, 1, 'Component Software: Beyond Object-Oriented Programming', 'http://www.amazon.com/Component-Software-Beyond-ObjectOriented-Programming/dp/0201178885' );

INSERT INTO `library`.`bookauthors` ( `AuthorID`, `BookID` ) VALUES (2,1), (2,2), (3,2), (4,2), (2,3), (3,3), (4,3), (2,4), (3,4), (4,4), (1,5), (5,6), (5,7), (6,7), (5,8), (2,9), (7,10), (8,10), (9,10), (8,11), (9,11), (10,11), (11,12), (12,13), (13,13), (13,14), (14,15);

INSERT INTO `library`.`privilegeduser` ( `UserID`, `Login`, `Password` ) VALUES ( 1, 'lib_admin', 'nimda_bil2006' );

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

Пример кода компонентов модели данных приложения и описания их отображения на БД.

Ниже приведен примерный код классов C#, объекты которых представляют хранимые данные приложения.

using System;

using System.Collections;

namespace CMC.SDT.Library { public class Author { private int id;

private string firstName;

private string surname;

private string restNames;

private ICollection books;

public virtual int ID { get { return id; } set { id = value; } } public virtual string FirstName { get { return firstName; } set { firstName = value; } } public virtual string Surname { get { return surname; } set { surname = value; } } public virtual string RestNames { get { return restNames; } set { restNames = value; } } public virtual ICollection Books { get { return books; } set { books = value; } } } public class Publisher { private int id;

private string title;

private ICollection books;

public virtual int ID { get { return id; } set { id = value; } } public virtual string Title { get { return title; } set { title = value; } } public virtual ICollection Books { get { return books; } set { books = value; } } } public class Book { private int id;

private string title;

private string isbn;

private string file;

private int year;

private Publisher publisher;

private ICollection authors;

public virtual int ID { get { return id; } set { id = value; } } public virtual string Title { get { return title; } set { title = value; } } public virtual string ISBN { get { return isbn; } set { isbn = value; } } public virtual string File { get { return file; } set { file = value; } } public virtual int Year { get { return year; } set { year = value; } } public virtual Publisher Publisher { get { return publisher; } set { publisher = value; } } public virtual ICollection Authors { get { return authors; } set { authors = value; } } } public class PrivilegedUser { private int id;

private string login;

private string password;

public virtual int ID { get { return id; } set { id = value; } } public virtual string Login { get { return login; } set { login = value; } } public virtual string Password { get { return password; } set { password = value; } } } } Для каждого класса хранимых объектов необходимо определить отображение данных (свойств) этих объектов на таблицы БД и их поля. Описание этого отображения находится в конфигурационных файлах NHibernate.

Для каждого класса хранимых объектов необходимо определить отображение данных (свойств) этих объектов на таблицы БД и их поля. Это отображение определяется в конфигурационных файлах NHibernate. Схема описываемого им отображения показана на Рис. 4.

Рисунок 4. Схема отображения классов модели данных и их свойств на таблицы и поля БД.

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

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

using System;

using System.Web;

using NHibernate;

using NHibernate.Cfg;

Pages:     | 1 || 3 | 4 |   ...   | 5 |






















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

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