close

Вход

Забыли?

вход по аккаунту

?

Отчёт в 2,1

код для вставкиСкачать
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение высшего профессионального
образования
ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Факультет прикладной математики, информатики и механики
Кафедра математического обеспечения ЭВМ
Создание серверной части блог-платформы
Отчёт о прохождении производственной практике
по специальности 010501 Прикладная математика и информатика
специализация Системное программирование
Зав . кафедрой _________________ д. ф .-м.н., доц. Махортов С. Д.
(подпись)
Студент _______________________ Коротких И. С.
(подпись)
Руководитель __________________ преподаватель Шурлин М. Д.
(подпись)
Воронеж 2012
Оглавление
ПОСТАНОВКА ЗАДАЧИ3
ПАТТЕРН MVC4
ASP.NET MVC5
ОБЗОР АРХИТЕКТУРЫ ИНФОРМАЦИОННОЙ СИСТЕМЫ7
ПРОЕКТИРОВАНИЕ ТАБЛИЦ БАЗЫ ДАННЫХ8
ПЛАТФОРМА ADO.NET Entity Framework10
СОЗДАНИЕ КОНТРОЛЛЕРОВ И ПРЕДСТАВЛЕНИЙ12
ЗАКЛЮЧЕНИЕ17
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ18
ПОСТАНОВКА ЗАДАЧИ
Создать серверную часть блог-платформы, используя ASP.NET MVC. Блог должен быть авторским т. е. создавать посты имеет право только владелец, который выступает также в роли основного администратора. Читать статьи могут и незарегистрированные пользователи. К постам могут быть прикреплены опросы. В проекте должны использоваться базы данных MS SQL.
ПАТТЕРН MVC
Паттерн1 model-view-controller (MVC, "Модель-представление-поведение", "Модель-представление-контроллер") - схема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента так, что модификация одного из компонентов оказывает минимальное воздействие на остальные.
Основная цель применения этой концепции состоит в разделении бизнес-логики (модели) от её визуализации (представления, вида). Контроллер и представление зависят от модели, но модель никак не зависит от этих двух компонент. Пользователь видит представление, на нем же производит какие-то действия, эти действия представление перенаправляет контроллеру и подписывается на изменение данных модели, контроллер в свою очередь производит определенные действия над моделью данных, представление получает последнее состояние модели и отображает ее пользователю. За счет такого разделения повышается возможность повторного использования. Наиболее полезно применение данной концепции в тех случаях, когда пользователь должен видеть те же самые данные одновременно в различных контекстах и/или с различных точек зрения. В частности, выполняются следующие задачи:
1. К одной модели можно присоединить несколько видов, при этом не затрагивая реализацию модели. Например, некоторые данные могут быть одновременно представлены в виде электронной таблицы, гистограммы и круговой диаграммы.
2. Не затрагивая реализацию видов, можно изменить реакции на действия пользователя (нажатие мышью на кнопке, ввод данных), для этого достаточно использовать другой контроллер.
3. Ряд разработчиков специализируется только в одной из областей: либо разрабатывают графический интерфейс, либо разрабатывают бизнес-логику. Поэтому возможно добиться того, что программисты, занимающиеся разработкой бизнес-логики (модели), вообще не будут осведомлены о том, какое представление будет использоваться.
ASP.NET MVC
ASP.NET MVC - это фреймворк2, для создания web-приложений, реализующий шаблон проектирования (или паттерн) Модель-Вид-Контроллер (Model-View-Controller, MVC). Данный фреймворк входит в состав ASP .NET 4.0, и изначально доступен в среде разработки Visual Studio 2010.
ASP .NET MVC базируется на .aspx, .ascx и .master файлах, полностью поддерживает аутентификацию на базе форм, роли, кэширование данных, управление состоянием сессий, health monitoring, конфигурирование, архитектуру провайдеров и многое другое.
С другой стороны, MVC Framework не предполагает использование классических web-форм и web-элементов управления, в нем отсутствуют такие механизмы как обратные вызовы (postbacks) и состояние представления (viewstate). MVC Framework так же предлагает использование URL-mapping и архитектуру REST в качестве модели запросов, что положительно повлияет на поисковую оптимизацию web-проектов.Следует внимательно продумать вопрос о создании web-приложения на основе платформы ASP.NET MVC или на основе модели web-форм ASP.NET. Платформа MVC не заменяет собой модель web-форм. Обе модели можно использовать для web-приложений. (при наличии существующих приложений на основе web-форм они будут продолжать работу в нормальном режиме). Перед использованием платформы MVC или модели web-форм для определенного web-сайта следует взвесить все преимущества каждого из подходов. Платформа ASP.NET MVC имеет следующие преимущества. * Она облегчает управление сложными структурами путем разделения приложения на модель, представление и контроллер. * Она не использует состояние просмотра и серверные формы. Это делает платформу MVC идеальной для разработчиков, которым необходим полный контроль над поведением приложения. * Она использует схему основного контроллера, при которой запросы web-приложения обрабатываются через один контроллер. Это позволяет создавать приложения, поддерживающие расширенную инфраструктуру маршрутизации. Дополнительные сведения см. в разделе Основной контроллер. * Она обеспечивает расширенную поддержку разработки на основе тестирования. * Она хорошо подходит для web-приложений, поддерживаемых крупными коллективами разработчиков, а также web-разработчикам, которым необходим высокий уровень контроля над поведением приложения. ОБЗОР АРХИТЕКТУРЫ ИНФОРМАЦИОННОЙ СИСТЕМЫ
Архитектура информационной системы - концепция, определяющая модель, структуру, выполняемые функции и взаимосвязь компонентов информационной системы.
Компоненты информационной системы по выполняемым функциям можно разделить на три слоя: слой представления, слой бизнес-логики и слой доступа к данным. Слой представления - все, что связано с взаимодействием с пользователем: нажатие кнопок, движение мыши, отрисовка изображения, вывод результатов поиска и т.д. Бизнес логика - правила, алгоритмы реакции приложения на действия пользователя или на внутренние события, правила обработки данных. Слой доступа к данным - хранение, выборка, модификация и удаление данных, связанных с решаемой приложением прикладной задачей.
Для данного приложения наиболее подходящей является трехуровневая клиент-серверная архитектура. Такая архитектура разбивает процесс обработки данных между клиентом, сервером приложений и хранилищем данных. В отличие от традиционной двухзвенной архитектуры здесь присутствует сервер приложений как промежуточное звено между клиентом и хранилищем данных. В простейшей конфигурации физически сервер приложений может быть совмещён с сервером базы данных на одном компьютере, к которому по сети подключается один или несколько терминалов.
Трёхуровневая архитектура позволяет избежать усиления компьютеров клиентов и загруженности Сети из-за перемещения данных. Получая запрос, сервер приложений обрабатывает его, связываясь с хранилищем данных, в каком бы месте необходимые данные не находились. Клиент лишь получает результат в виде HTML-файла. К тому же, объем пересылаемых данных уменьшается, что существенно снижает интернет-трафик. Таким образом, сервер приложений является стандартизованной платформой для динамической доставки контента и построения основных приложений.Следует также отметить, что трёхуровневае клиент-серверная архитектура позволяет очень четко отделить слой представления, слой доступа к данным и бизнес логику.
Рисунок 2
ПРОЕКТИРОВАНИЕ ТАБЛИЦ БАЗЫ ДАННЫХ
В проекте использовались базы данных MS SQL и среда MS SQL Server Management Studio. На рисунке 3 приведена диаграмма базы данных, выполненная в программе PowerDesigner.
Рисунок 3
Прежде всего выделим сущность "пост". Пост (англ. post) - отдельно взятое сообщение в форуме или блоге. Пост верхнего уровня называется корневым. Для хранения постов создана таблица Posts с ключом PostID, имеющим целый тип (int). Поля DateOfPublication и DateOfLastChange хранят дату создания и последнего изменения поста соответственно.
Каждый пост относится к определенной теме. Для их хранения предназначена таблица Categories с целочисленным ключом CategoryID. Одной категории может соответствовать множество постов, потому таблицы Categories и Posts находятся в отношении один ко многим.
Таблица Comments с ключом CommentID хранит комментарии к постам. Поля AuthorName, AuthorCity и AuthorCountry не являбтся обязательными для заполнения.
В таблице Polls хранится информация о опросах. PollID - челочисленный ключ опроса, поле PostID указывает на страницу поста с данным опросом, Question - содержит непосредственно сам вопрос, Variants - является целочисленным и хранит число вариантов ответа, DateOfStart и DateOfEnd содержат даты начала и завершения опроса соответственно. Для подсчета голосов по соответствующим вариантам ответа предназначена таблица Answers. В поле Text заносится сам вариант ответа, а в поле Counter - число голосов за данный вариант. Целочисленным ключом является AnswerID.
ПЛАТФОРМА ADO.NET Entity Framework
ADO.NET Entity Framework (EF) - объектно-ориентированная технология доступа к данным, является object-relational mapping (ORM) решением для .NET Framework от Microsoft. Предоставляет возможность взаимодействия с объектами как посредством LINQ в виде LINQ to Entities, так и с использованием Entity SQL.
Платформа Entity Framework позволяет создавать приложения для доступа к данным, работающие с концептуальной моделью приложения, а не напрямую с реляционной схемой хранения. Цель состоит в уменьшении объема кода и снижении затрат на сопровождение приложений, ориентированных на обработку данных. Приложения Entity Framework предоставляют следующие преимущества. * Приложения могут работать концептуальной моделью в терминах предметной области - в том числе с наследуемыми типами, сложными элементами и связями. * Приложения освобождаются от жестких зависимостей от конкретного ядра СУБД или схемы хранения. * Сопоставления между концептуальной моделью и схемой, специфичной для конкретного хранилища, могут меняться без изменения кода приложения. * Разработчики имеют возможность работать с согласованной моделью объектов приложения, которая может быть сопоставлена с различными схемами хранения, которые, возможно, реализованы в различных системах управления данными. * Несколько концептуальных моделей могут быть сопоставлены с единой схемой хранения. * Поддержка запросов LINQ обеспечивает проверку синтаксиса во время компиляции для запросов к концептуальной модели. При создании Entity Data Model (EDM) в данном проекте использовался подход Database First (База данных вначале), позволяющий максимально раскрыть потенциал используемой системы управления базами данных. Полученная модель представлена на рисунке 4.
В настройках модели EDM в пункте "стратегия создания кода" в проекте было отключено создание кода по умолчанию. При помощи генератора автоматически отслеживаемых сущностей ADO.NET был получен класс BlogEntities.
Рисунок 4
СОЗДАНИЕ КОНТРОЛЛЕРОВ И ПРЕДСТАВЛЕНИЙ
В проект были добавлены роли "Administrator" и "User" и регистрация с авторизацией. Это позволяет контролировать права пользователей. Так метод контроллера, перед которым идет строка кода
[Authorize(Roles = "Administrator")]
сработает только в том случаи, если пользователь авторизирован и является администратором.
Рассмотрим подробнее методы контроллера AdminController по работе с постами.
Методы создания поста:
// GET: /Post/Create
[Authorize(Roles = "Administrator")]
public ActionResult Create()
{
ViewBag.CategoryID = new SelectList(db.Catrgories, "CategoryID", "Title");
return View();
} //
// POST: /Post/Create
[HttpPost]
[Authorize(Roles = "Administrator")]
public ActionResult Create(Post post)
{
if (ModelState.IsValid)
{
post.DateOfPublication = DateTime.Now;
post.DateOfLastChenge = DateTime.Now;
db.Posts.AddObject(post);
db.SaveChanges();
return RedirectToAction("Index"); }
ViewBag.CategoryID = new SelectList(db.Catrgories, "CategoryID", "Title", post.CategoryID);
return View(post);
}
и их представление
<h2>Создание нового поста</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Ваш новый пост</legend>
<div class="editor-label">
@Html.LabelFor(model => model.CategoryID, "Тема")
</div>
<div class="editor-field">
@Html.DropDownList("CategoryID", String.Empty)
@Html.ValidationMessageFor(model => model.CategoryID)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Name, "Название")
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name, "Текст Вашего поста")
@Html.ValidationMessageFor(model => model.Name)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Text)
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.Text)
@Html.ValidationMessageFor(model => model.Text)
</div>
<p>
<input type="submit" value="Создать" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Назад", "Index")
</div>
Первый из двух методов просто выводит html-страницу для создания поста, а второй - реагирует на нажатие кнопки "Создать" и обрабатывает введенные данные, сохраняя их в базу данных. Для выборки из базы данных используются средства LINQ.
Метод, отображающий постранично все посты:
public ViewResult ShowPosts(int pageNumber = 0)
{
ViewData["PageNumber"] = pageNumber;
ViewData["PageSize"] = PageSize;
ViewData["ItemsCounter"] = db.Posts.Count();
var posts = (from Post in db.Posts orderby Post.DateOfPublication
select Post).Skip(PageSize*pageNumber).
Take(PageSize).ToList();
return View(posts);
}
При помощи ViewDate в представление передаются:
* PageNumber - текущий номер страницы. Значение по умолчанию - 0.
* PageSize - константа, хранящая максимальное число ссылок-заголовков на посты для отображения на одной странице.
* ItemsCounter - общее число постов в базе данных
Представление:
@model IEnumerable<Blog.Models.Post>
@{
ViewBag.Title = "Посты";
}
<h1>Посты</h1>
<br/> <br/>
@if (User.IsInRole("Administrator"))
{
@Html.ActionLink("управление постами","Index","Post")
<br/> <br/>
}
<table>
@foreach (var item in Model)
{
<h3>
<p align="left">
@Html.ActionLink(item.Name, "Create", "Comment", new { id = item.PostID }, null)
</p> </h3>
}
</table>
@{
int nPage = (int) Html.ViewData["pagenumber"];
int Page = (int)Math.Ceiling((double)((int)Html.ViewData["ItemsCounter"]) / (int)Html.ViewData["PageSize"]);
}
<br/>
@if (nPage != 0)
{
@Html.ActionLink("<", "showposts", new {pagenumber = nPage - 1})
}
@if (nPage<Page-1)
{
@Html.ActionLink(" >", "showposts", new {pagenumber = nPage + 1})
Методов редактирования постов два: первый находит в базе данных пост для изменения по его PostID и отдает его представлению, второй - проверяет валидность и, в случаи корректного заплнения всех полей, сохраняет изменения.
[HttpPost]
[Authorize(Roles = "Administrator")]
public ActionResult Edit(Post post)
{
if (ModelState.IsValid)
{
post.DateOfLastChenge = DateTime.Now;
post.DateOfPublication = PostEditHelper.rezPost.DateOfPublication;
db.Posts.Attach(post);
db.ObjectStateManager.ChangeObjectState(post, EntityState.Modified);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.CategoryID = new SelectList(db.Catrgories, "CategoryID", "Title", post.CategoryID);
return View(post);
}
//
// GET: /Post/Delete
[Authorize(Roles = "Administrator")]
public ActionResult Delete(int id)
{
Post post = db.Posts.Single(p => p.PostID == id);
return View(post);
}
При обработке удаления поста используется паттерн Dispose. Первый метод Delete по полученному id находит пост для удаления и запрашивает у пользователя подтверждение на удаление. При полученном подтверждении, второй метод Delete удалит статью.
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{ Post post = db.Posts.Single(p => p.PostID == id);
db.Posts.DeleteObject(post);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
ЗАКЛЮЧЕНИЕ
За время прохождения производственной практики я приобрел опыт разработки реального программного проекта, освоил правила работы с системой контроля версий Git Extensions. Мной были изучены паттерны проектирования MVC (Model View Controller), Dispose, технологии ASP.NET MVC, ADO.NET Entity Framework, LINQ (Language Integrated Query). В ходе выполнения порученного мне проекта я приобрел опыт работы с базами данных MS SQL, закрепил и углубил свои теоретические знания в области HTML, CSS, языка C#, повысил свою профессиональную подготовку.
Принимая во внимание растущую востребованность в тех технологиях, которые были использованы в проекте производственной практики, считаю, что полученные навыки окажутся очень полезными в моей будущей работе по специальности.
Список использованных источников
1. Стивенсон Стивен. ASP.NET MVC Framework с примерами на C# для профессионалов. :Пер. с англ. - М. :ООО "И. Д. Вильямс", 2010. - 560 с. : ил. - Парал. тит. англ.
2. Линн Бенн. Магия Git. 2007.
3. Тернстрем Т. Вебер Э. Хотек М. Microsoft SQL Server 2008. разработка баз данных. учебный курс Microsoft. : Пер. с англ. - М. : " Русская Редакция", 2010. - 496 с.
4. http://www.asp.net/
1 Паттерн - эффективный способ решения характерных задач проектирования, в частности проектирования компьютерных программ.
2 Фреймворк (англ. framework, Каркас) - структура программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта. В отличие от библиотек, которые объединяют набор подпрограмм близкой функциональности, фреймворк содержит в себе большое количество разных по назначению библиотек.
---------------
------------------------------------------------------------
---------------
------------------------------------------------------------
2
Документ
Категория
Без категории
Просмотров
284
Размер файла
448 Кб
Теги
отчет, практика
1/--страниц
Пожаловаться на содержимое документа