- •Базы данных и информационные системы. Основные понятия, классификация. Корпоративные информационные системы.
- •Виды и сравнительная характеристика архитектуры информационных систем на основе баз данных.
- •Этапы создания и жизненный цикл информационной системы. Модели и стандарты жизненного цикла – их краткая характеристика.
- •Каскадное проектирование информационной системы (ис). Поэтапная модель с промежуточным контролем. Преимущества и недостатки. Стадии и этапы создания ис в соответствии с гост 34.601-90.
- •Спиральное проектирование информационной системы. Гибкие методологии разработки. Примеры. Преимущества и недостатки.
- •Назначение и классификация case средств. Примеры.
- •Системы контроля версий (скв). Назначение, классификация, примеры. Репозиторий. Сервис GitHub. Организация коллективной работы над проектом с помощью скв.
- •Использование eRwin Data Modeler для логического и физического моделирование баз данных. Нотация idef1x. Прямое и обратное проектирование. Поддерживаемые субд.
- •Общая характеристика системы Git. Структура репозитория. Алгоритмы и принципы работы. Использование Visual Studio с Git.
- •Case средства для моделирования баз данных. Общая характеристика eRwin Data Modeler. Функции и характеристика используемых нотаций.
- •Современные клиент-серверные субд. Общая характеристика субд ms sql Server: версии, редакции, основные службы и компоненты, режимы работы сервера.
- •Субд ms sql Server: системные базы данных и таблицы, структура данных на физическом уровне (файлы баз данных, журналы транзакций, файловые группы и др.).
- •Субд ms sql Server: конфигурирование и администрирование (создание и удаление баз данных, задание свойств, шифрование, создание объектов баз данных, перемещение баз данных и др.).
- •Архитектура и фундаментальные классы ado.Net. Типы поставщиков данных и их обобщенная структура.
- •Объект Connection. Свойства, методы, примеры использования. Обработка ошибок.
- •Объект Cоmmand. Свойства, методы, примеры использования.
- •Выполнение параметризованных команд с использованием объекта Command. Атака внедрением.
- •Хранимые процедуры. Вызов хранимых процедур в ado .Net, передача параметров.
- •Объект DataReader. Свойства, методы, примеры использования.
- •Объект DataAdapter. Свойства, методы, примеры использования для наполнения и обновления DataSet
- •Объект DataSet. Структура, свойства, методы, примеры использования.
- •Цикл работы с данными с использованием графического интерфейса Windows Forms. Характеристика источников данных для элементов управления
- •Общая характеристика основных элементов управления Windows Form, позволяющих осуществлять связывание с источниками данных. Простое и сложное связывание.
- •Класс Binding. Назначение, свойства, методы, примеры использования.
- •Класс BindingSource. Назначение, свойства, методы, примеры использования.
- •Класс BindingSource. Организация фильтрации записей. Вывод связных записей из двух источников данных. Примеры фрагментов кода.
- •Использование средств Visual Studio для разработки приложений баз данных на основе технологии связывания элементов управления с данными. Класс BindingNavigator.
- •Общая характеристика Web-технологий для построения приложений баз данных. Клиент-серверное взаимодействие по протоколу http. Asp.Net. Жизненный цикл страницы asp .Net.
- •Архитектура, история и перспективы технологии asp.Net. Сравнение технологий Web Forms asp.Net и mvc asp.Net. Компоненты приложения Web Forms asp.Net.
- •Asp.Net страницы. Master Pages. Объекты Page, Session, Application, Cache, Request, Response, Server, Session, User.
- •Конфигурирование приложений asp.Net. Типы, структура и состав файлов конфигурации. Способы обращения к разделам
- •Группы элементов управления asp.Net. Серверные элементы управления html. Установка атрибутов и свойств. События элементов управления и их обработка.
- •Web элементы управления asp.Net. События элементов управления и их обработка. Механизм AutoPostBack.
- •Элементы управления проверки достоверности asp.Net.
- •Способы хранения состояния web приложения asp.Net.
- •Связывание элементов управления Web Form с источниками данных. Способы связывания. Примеры.
- •Связывание элементов управления Web Form со списками данных. Примеры.
- •Элементы управления Web Form - источники данных. Элемент SqlDataSource и его использование для работы с реляционными данными. Выполнение параметризованных команд с использованием SqlDataSource.
- •Элементы Web Form - потребители данных. Элементы управления, связанные с данными и их краткая характеристика. Элементы управления для работы с табличными данными.
- •Элемент управления GridView. Использование шаблонов в GridView.
- •Реализация шаблона mvc (Model View Controller) в asp.Net и Visual Studio.
- •Общая характеристика контроллеров (Controllers): создание, методы, методы действий, возвращаемые результаты, способы вызова. Примеры.
- •Создание класса, реализующего интерфейс iController.
- •Создание контроллера за счет наследования от класса Controller
- •Способы получения данных контроллером. Стандартный привязчик DefaultModelBinder. Примеры.
- •Передача данных из метода действия контроллера в представление. Примеры.
- •Общая характеристика представлений (Views): назначение, создание, вызов из контроллера. Строго типизированные представления. Примеры.
- •Движок Razor. Выражения кода и строки кода. Хелперы, шаблонные хелперы. Примеры.
- •Выражениям кода
- •Блоку кода.
- •Мастер-страницы. Частичные представления. Примеры.
- •Общая характеристика моделей. Entity Framework.
- •Маршрутизация url запросов asp.Net mvc приложением.
- •Общая характеристика технологии linq и интерфейсов для работы с различными источниками данных.
- •Операция запроса в linq. Способы записи запроса (синтаксисы записи). Выполнение запроса.
- •Запросы linq для осуществления фильтрации, сортировки и группировки. Примеры для различных способов записи.
- •Запросы linq для обращения к двум и более последовательностям. Соединение. Примеры для различных способов записи.
- •Правила построения выражений запросов в linq. Аналогии с sql. Пример сложного выражения.
- •Техническое задание на разработку информационной системы: основные разделы и их содержание.
- •Руководство программиста информационной системы: назначение документа, его разделы и их содержание.
- •Руководство пользователя информационной системы: назначение документа, его разделы и их содержание.
- •6. Рекомендации по освоению.
Выполняется преобразование типов.
Поиск соответствия: например, привязчик ищет значения для параметров следующего действия:
public ActionResult Edit(int id) {
// ... }
Привязчик DefaultModelBinder просматривает в поиске значения для параметра id следующие пути:
Request.Form["id"]
RouteData.Values["id"]
Request.QueryString["id"]
Request.Files["id"]
Чтобы DefaultModelBinder мог связать значение с параметром, элемент данных запроса должен обязательно иметь то же имя, что и параметр. То есть в данном случае они оба должны иметь имя id.
Привязка различных типов данных.
При привязке простых типов DefaultModelBinder преобразует строковое выражение параметра из данных запроса к типу параметра с помощью класса System.ComponentModel.TypeDescriptor. Если же значение нельзя преобразовать, то привязка оканчивается неудачей. Поэтому есть смысл использовать параметры, допускающие значение null, а в метод действия вкладывать соответствующую логику по проверке значения:
public ActionResult Edit(int? id) {
// ... }
При получении значений для сложных типов, например, для той же модели Book, DefaultModelBinder с помощью рефлексии просматривает объект и находит все свойства объекта, которые могут использоваться при привязке. Например, DefaultModelBinder видит, что объект Book имеет свойство Author, то привязчик будет искать в запросе параметр "Author".
Если свойство представляет простой тип, то для него используется, как было указано выше преобразование с помощью класса класса System.ComponentModel.TypeDescriptor.
Если же свойство представляет сложный тип - то опять повторяется рефлексия и весь цикл.
Передача данных из метода действия контроллера в представление. Примеры.
Существуют различные способы передачи данных из контроллера в представление:
Предоставление объекта модели представлению (1).
Использование объекта ViewData. ViewData представляет словарь из пар ключ-значение (2)
Использование объекта ViewBag. ViewBag - позволяет определить различные свойства и присвоить им любое значение. (3)
Использование объекта TempData. TempData - представляет словарь, хранящий пары ключ-значение, как и ViewData, но TempData позволяет сохранять переданное значение в течении всего текущего запроса. Использование TempData аналогично работе с ViewData.
(1) Отправить объект представлению можно, передав его в качестве параметра методу View(), как показано в примере ниже:
namespace ControllersAndActions.Controllers
{
public class ExampleController : Controller
{
public ViewResult Index()
{
DateTime date = DateTime.Now;
return View(date);
}
}
}
Объект DateTime передается как модель представления, а доступ к нему в представлении осуществляется с помощью ключевого слова Model синтаксиса Razor
@model DateTime
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
День недели: @Model.DayOfWeek
(2) ViewData представляет словарь из пар ключ-значение:
public ViewResult SomeMethod()
{
ViewData["Head"] = "Привет мир!";
return View("SomeView");
}
В этом случае в представлении SomeView.cshtml можно получить передаваемую строку следующим образом:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>SomeView</title>
</head>
<body>
<div>
<h2>@ViewData["Head"]</h2>
</div>
</body>
</html>
(3) Объект ViewBag позволяет определять произвольные свойства в динамическом объекте C# и обращаться к ним в представлении. Динамический объект доступен через свойство Controller.ViewBag, как показано в примере ниже:
namespace ControllersAndActions.Controllers
{
public class ExampleController : Controller
{
public ViewResult Index()
{
ViewBag.Message = "Привет";
ViewBag.Date = DateTime.Now;
return View();
}
}
}
В примере свойства Message и Date объекта ViewBag определяются простым присваиванием им значений. До этого момента указанные свойства не существовали, и никакой подготовительной работы для их создания не проводилось. Для чтения данных в представлении применяются те же самые свойства, которые устанавливались в методе действия:
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
День недели: @(ViewBag.Date.DayOfWeek)<br />
Сообщение из контроллера: @ViewBag.Message
Хотя ViewData и ViewBag и похожи, в то же время они не полностью эквивалентны.
Так, например, нельзя передавать динамические значения из ViewBag в методы расширения в представлениях.
Например, мы не можем написать @Html.TextBox("name", ViewBag.Name), так как компилятор C# должен знать тип каждого параметра во время компиляции, чтобы выбрать нужный метод расширения.
В этом случае нам надо либо использовать ViewData: @Html.TextBox("name", ViewData["Name"]), либо применить приведение типов: @Html.TextBox("name", (string)ViewBag.Name)
Общая характеристика представлений (Views): назначение, создание, вызов из контроллера. Строго типизированные представления. Примеры.
В ASP.NET MVC 5 представления - это файлы с расширением cshtml, которые содержат код пользовательского интерфейса в основном на языке html. Стандартное представление:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>SomeView</title>
</head>
<body>
<div>
<h2>@ViewBag.Message</h2>
</div>
</body>
</html>
Строго типизированное представление – представление, которому сообщается тип объекта модели представления:
@model IEnumerable<BookStore.Models.Book>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h3>Распродажа книг</h3>
<table>
<tr class="header"><td><p>Название книги</p></td>
<td><p>Автор</p></td>
<td><p>Цена</p></td><td></td>
</tr>
@foreach (BookStore.Models.Book b in Model)
{
<tr>
<td><p>@b.Name</p></td>
<td><p>@b.Author</p></td>
<td><p>@b.Price</p></td>
<td><p><a href="/Home/Buy/@b.Id">Купить</a></p></td>
</tr>
}
</table>
Хотя представление содержит главным образом, код html, оно не является html-страницей. При компиляции приложения на основе требуемого представления сначала генерируется класс на языке C#, а затем этот класс компилируется. При компиляции создается класс, наследующий от класса System.Web.Mvc.WebViewPage<T>, где T - это класс модели, которая будет использоваться. Все действия данного класса заключены в методе Execute, в котором с помощью метода WriteLiteral обрабатываются все имеющиеся в представлении элементы разметки html.
Для создания нового представления выберем в проекте папку Views и в нем нажмем правой кнопкой на подкаталог Home и в появившемся списке выберем пункт Add -> View... (Представление). В окне добавления нового представления предлагается настроить целый ряд опций:
View Name: имя нового представления. После создания ему автоматически будет присваиваться расширение cshtml.
Template: шаблон нового представления. Мы можем выбрать из следующего списка шаблонов:
Empty (without model): создается пустое представление с начальной разметкой
Empty: также создается пустое представление, но теперь ниже мы можем выбрать модель, которая будет подключена в представлении с помощью директивы @model
Create: генерируется представление с формой для создания новых объектов модели. В этой форме для каждого свойства модели создается отдельное поле
Delete: генерируется представление с формой для удаления объектов модели. В этой форме для каждого свойства модели создается отдельное поле
Details: генерируется представление, которое отображает значения всех свойств модели
Edit: генерируется представление с формой для редактирования имеющихся объектов модели. В этой форме для каждого свойства модели создается отдельное поле
List: создается представление, которое в таблице отображает все объекты из списка моделей. Для генерации списка объектов в данное представление необходимо передавать из метода контроллера значение типа IEnumerable<Тип_модели>. Представление также содержит ссылки на методы для выполнения операций создания/правки/удаления.
Model class: при выборе одной из предыдущих опций, кроме опции Empty (without model), нам становится доступно это поле, в котором мы можем указать модель для типизации представления. Такое представление будет считаться строго типизированным, то есть привязанным к одному классу модели
Data context class: также при выборе одной из предыдущих опций, кроме опции Empty (without model), нам становится доступно это поле, в котором мы можем выбрать класс контекста данных
Create as a partial view: позволяет создать частичное представление
Reference Script Libraries: эта опция показывает, будет ли представление автоматически подключать стандартный набор библиотек jQuery и прочих файлов JavaScript.
Use a layout page: эта опция указывает, будет ли использоваться мастер-страница или представление будет самодостаточным. После установки этой опции нам станет доступным нижнее поле, в котором можно выбрать мастер-страницу. Для движка Razor указание мастер-страницы не является обязательным, если вы собираетесь использовать мастер-страницу, определенную по умолчанию в файле _ViewStart.cshtml. Однако, если вы хотите переопределить мастер-страницу, то можете воспользоваться этой опцией.
Движок Razor. Выражения кода и строки кода. Хелперы, шаблонные хелперы. Примеры.
Razor - способ рендеринга (движок) представлений, который имеет определенный синтаксис для перехода от разметки html к коду C#. Стандартное представление очень похоже на обычную веб-страницу. Однако оно также имеет вставки кода на C#, которые предваряются знаком @. Этот знак используется движком представлений Razor для перехода к коду на языке C#. Чтобы понять суть работы движка Razor и его синтаксиса, вначале посмотрим, что представляют из себя движки представлений. При вызове метода View контроллер не производит рендеринг представления и не генерирует разметку html. Контроллер только готовит данные и выбирает, какое представление надо возвратить в качестве объекта ViewResult. Затем уже объект ViewResult обращается к движку представления для рендеринга представления в выходной результат. Предыдущие версии ASP.NET MVC и Visual Studio по умолчанию поддерживали два движка представлений
движок Web Forms
движок Razor,
Сейчас Razor в силу своей простоты и легкости стал единственным движком по умолчанию. Использование Razor позволило уменьшить синтаксис при вызове кода C#, сделать сам код более "чистым".
Использование синтаксиса Razor характеризуется тем, что перед выражением кода стоит знак @, после которого осуществляется переход к коду C#.
Существуют два типа переходов к:
Выражениям кода
Блоку кода.
Например, переход к выражению кода:
<p>@b.Name</p>
Razor автоматически распознает, что Name - это свойство объекта b.
Также можно использовать стандартные классы и методы, например, выведем текущее время:
<h3>@DateTime.Now.ToShortTimeString()</h3>
Применение блоков кода аналогично, только знак @ ставится перед всем блоком кода, а движок автоматически определяет, где этот блок кода заканчивается:
@foreach (BookStore.Models.Book b in Model)
{
<p>@b.Name</p>
}
Более того мы можем создавать блоки кода в представлении, создавать там переменные так же, как и в файле кода C#:
@{
string head = "Привет мир!!!";
head = head + " Добро пожаловать на сайт!";
}
<h3>@head</h3>
Хелперы. Шаблонные хелперы
Шаблонизированные вспомогательные методы HTML (HTML-хелперы) в ASP.NET MVC Framework - позволяют генерировать различный html-код.
Метод |
Описание |
Display() |
Визуализирует представление, допускающее только чтение, для указанного свойства модели, выбирая HTML-элемент в соответствие с типом и метаданными свойства |
DisplayFor() |
Строго типизированная версия предыдущего вспомогательного метода |
Editor() |
Визуализирует редактор для указанного свойства модели, выбирая HTML-элемент в соответствие с типом и метаданными свойства |
EditorFor() |
Строго типизированная версия предыдущего вспомогательного метода |
Label() |
Визуализирует HTML-элемент label, ссылающийся на указанное свойство модели |
LabelFor() |
Строго типизированная версия предыдущего вспомогательного метода |
Ш
аблонизированные
вспомогательные методы HTML в ASP.NET MVC
Framework
@model HelperMethods.Models.User
@{
ViewBag.Title = "DisplayUser";
}
<h2>Данные пользователя</h2>
<div class="item">
@Html.LabelFor(user => user.UserId)
@Html.Display("UserId")
</div>
<div class="item">
@Html.Label("Имя")
@Html.Display("FirstName")
</div>
<div class="item">
@Html.Label("Фамилия")
@Html.DisplayFor(m => m.LastName)
</div>
<div class="item">
@Html.Label("Роль")
@Html.DisplayFor(m => m.Role)
</div>
<div class="item">
@Html.Label("Дата рождения")
@Html.DisplayFor(m => m.BirthDate)
</div>
Шаблонизированные вспомогательные методы HTML в ASP.NET MVC Framework, оперирующие на полных объектах
Метод |
Описание |
DisplayForModel() |
Визуализирует представление, предназначенное только для чтения, для целого объекта модели |
EditorForModel() |
Визуализирует элементы редактора для целого объекта модели |
LabelForModel() |
Визуализирует HTML-элемент label, ссылающийся на целый объект модели |
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@model BookStore.Models.Book
<h2>Книга № @Model.Id</h2>
@Html.DisplayForModel()
Мастер-страницы. Частичные представления. Примеры.
Мастер-страницы используются для создания единообразного, унифицированного вида сайта. Мастер-страницы - это представления, позволяющие включать в себя другие представления. Например, можно определить на мастер-странице общие для всех остальных представлений элементы, а также подключить общие стили и скрипты.
По умолчанию при создании нового проекта ASP.NET MVC 5 в проект уже добавляется мастер-страница под названием _Layout.chtml, которую можно найти в каталоге Views/Shared.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
</head>
<body>
<nav>
<ul class="menu">
<li>@Html.ActionLink("Главная", "Index", "Home")</li>
</ul>
</nav>
@RenderBody()
</body>
</html>
Метод @RenderBody() - является заместителем, на место которого потом будут подставляться другие представления, использующие данную мастер-страницу. Чтобы в представлении использовать мастер-страницу, нам надо в секции Layout указать путь к нужной мастер-странице. Например, в представлении Index.cshtml можно определить мастер-страницу так:
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
Если мы не используем мастер-страницу, то указываем Layout = null;.
Также необязательно для всех представлений использовать одну и ту же мастер-страницу. Можно определить несколько мастер-страниц, например, одну для форума, одну для блога и т.д., и в зависимости от раздела сайта подключать нужную. Добавляются в проект они также, как и обычные представления.
Общая характеристика моделей. Entity Framework.
Все сущности в приложении принято выделять в отдельные модели. В зависимости от поставленной задачи и сложности приложения можно выделить различное количество моделей. Модели представляют собой простые классы и располагаются в проекте в каталоге Models. Модели описывают логику данных. Например, модель, представляющая книгу и ее покупку:
public class Book
{
// ID книги
public int Id { get; set; }
// название книги
public string Name { get; set; }
// автор книги
public string Author { get; set; }
// цена
public int Price { get; set; }
}
public class Purchase
{
public int PurchaseId { get; set; }
public string Person { get; set; }
public string Address { get; set; }
public int BookId { get; set; }
public DateTime Date { get; set; }
}
Данные моделей, как правило, хранятся в базе данных. Для работы с базой данных очень удобно пользоваться фреймворком Entity Framework, который позволяет абстрагироваться от написания sql-запросов, от строения базы данных и полностью сосредоточиться на логике приложения. Entity Framework (EF) — это объектно-реляционный модуль сопоставления, позволяющий разработчикам .NET работать с реляционными данными с помощью объектов, специализированных для доменов. Это устраняет необходимость в написания большей части кода для доступа к данным, который обычно требуется разработчикам. Для подключения к базе данных через Entity Framework, нам нужен посредник - контекст данных. Контекст данных представляет собой класс, производный от класса DbContext. Контекст данных содержит одно или несколько свойств типа DbSet<T>, где T представляет тип объекта, хранящегося в базе данных. Например, создадим контекст данных для работы с вышеприведенными моделями:
namespace BookStore.Models
{
public class BookContext : DbContext
{
public DbSet<Book> Books { get; set; }
public DbSet<Purchase> Purchases { get; set; }
}
}
С помощью свойств Books и Purchases мы получаем доступ к данным соответствующих моделей, которые хранятся в базе данных.
Способы взаимодействия с БД:
Entity Framework предполагает три возможных способа взаимодействия с базой данных:
Database first: Entity Framework создает набор классов, которые отражают модель конкретной базы данных
Model first: сначала разработчик создает модель базы данных, по которой затем Entity Framework создает реальную базу данных на сервере.
Code first: разработчик создает класс модели данных, которые будут храниться в БД, а затем Entity Framework по этой модели генерирует базу данных и ее таблицы
Маршрутизация url запросов asp.Net mvc приложением.
В ASP.NET MVC 5 все определения маршрутов находятся в файле RouteConfig.cs, который располагается в проекте в папке App_Start. Если мы на него посмотрим, то увидим настройки маршрута по умолчанию:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace Mvc5RoutesApp
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}
Установкой маршрутов занимается статический метод RegisterRoutes. Вызов метода производится в файле Global.asax в методе Application_Start:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
Вызов метода RouteConfig.RegisterRoutes(RouteTable.Routes) как раз и производит регистрацию маршрутов в приложении.
Маршрут по умолчанию:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}") - отключает обработку запросов для некоторых файлов, например с расширением *.axd (WebResource.axd)
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
содержит маршрут Default, связывающий первый сегмент URL с именем контроллера, второй с методом, и третий с параметром id.
Общая характеристика технологии linq и интерфейсов для работы с различными источниками данных.
LINQ (Language Integrated Query, запрос, интегрированный в язык) – проект Microsoft по добавлению синтаксиса языка запросов, напоминающего SQL, в языки программирования платформы .NET Framework
Технология LINQ позволяет вам писать безопасные в смысле типизации структурированные запросы к локальным коллекциям объектов и удаленным источникам данных.
LINQ позволяет вам строить запросы к любой коллекции, реализующей интерфейс IEnumerable<>, будь то массив, список, коллекция XML DOM или удаленный источник данных, такой как таблицы на SQL-сервере.
Технология LINQ предлагает сочетание достоинств проверки типов на этапе компиляции и динамического составления запросов.
Системные типы, поддерживающие LINQ, определены в пространствах имен System.Linq и System.Linq.Expressions в сборке System.Core.
Запрашиваемые (исходные) данные могут быть представлены в форме:
XML
LINQ to XML — API-интерфейс, который ориентирован на работу с XML
баз данных
LINQ to SQL — API-интерфейс IQueryable<T>, позволяет запросам LINQ работать с реляционными базами данных.
LINQ to DataSet — API-интерфейс для работы с DataSet.
LINQ to Entities — альтернативный LINQ to SQL API-интерфейс для обращения к базе данных. Он отделяет сущностную объектную модель от физической базы данных, вводя логическое отображение между ними двумя. В частности, когда необходимо ослабить связь между сущностной объектной моделью и базой данных, если сущностные объекты конструируются из нескольких таблиц или требуется большая гибкость в моделировании сущностных объектов, то в этом случае LINQ to Entities может стать оптимальным выбором.
объектов
LINQ to Objects - API-интерфейс IEnumerable<T> для стандартных операций запросов (Standard Query Operators)
Операция запроса в linq. Способы записи запроса (синтаксисы записи). Выполнение запроса.
Оператор запроса — это метод, преобразующий последовательность. В типичном случае оператор запроса принимает входную последовательность и возвращает результат преобразования — выходную последовательность. В классе Enumerable из пространства имен System.Linq имеется около 40 операторов запроса, и все они реализованы как статические методы расширения. Они называются стандартными операторами запроса.
Все операции запроса LINQ состоят из трех различных действий.
получение источника данных;
создание запроса;
выполнение запроса
Запрос – это набор инструкций, которые описывают, какие данные необходимо извлечь из указанного источника (или источников) данных, а также описывают форму и организацию извлекаемых данных. Запрос отличается от полученного с его помощью результата.
Способы создания запросов LINQ на языке C#:
Использование синтаксиса запроса (интегрированный запрос).
Использование синтаксиса метода (методы расширений).
Использование сочетания синтаксиса запроса и синтаксиса метода.
Пример:
class IntroToLINQ
{
static void Main()
{
// 1. Получение источника данных
int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };
// 2. Создание запроса
// numQuery – это IEnumerable<int>
var numQuery =
from num in numbers
where (num % 2) == 0
select num;
// 3. Выполнение запроса
foreach (int num in numQuery)
{
Console.Write("{0,1} ", num);
}
}
}
LINQ включает в себя около 50 стандартных операций запросов, разделяемых на 2 большие группы
отложенные операции - выполняются не во время инициализации, а только при их вызове;
не отложенные операции-выполняются сразу.
Запросы linq для осуществления фильтрации, сортировки и группировки. Примеры для различных способов записи.
Метод расширения Where и соответствующее выражение запроса where.
//Where extension method example
var customersOver25 = customers.Where(cust => cust.Age > 25);
//where query operator example
var customersOver25 = from cust in customers where cust.Age > 25 select cust;
Метод расширения OrderBy и соответствующее выражение запроса orderby.
//OrderBy extension method example
var sortedCustomers = customers.OrderBy(cust => cust.FirstName);
//orderby query operator example
var sortedCustomers = from cust in customers orderby cust.FirstName select cust;
Предложение group позволяет группировать результаты на основе указанного ключа.
Метод расширения GroupBy и соответствующее выражение запроса groupby.
//GroupBy extension method example
var customersGroupedByAge = customers.GroupBy(cust => cust.Age);
//groupby query operator example
var customersGroupedByAge = from cust in customers group cust by cust.Age;
Когда запрос завершается предложением group, результаты представляются в виде списка из списков. Каждый элемент в списке является объектом, имеющим член Key и список элементов, сгруппированных по этому ключу.
Запросы linq для обращения к двум и более последовательностям. Соединение. Примеры для различных способов записи.
Если необходимо ссылаться на результаты операции группировки, можно использовать ключевое слово into для создания идентификатора, который можно будет запрашивать. Следующий запрос возвращает только те группы, которые содержат более двух заказчиков.
// custQuery is an IEnumerable<IGrouping<string, Customer>>
var custQuery =
from cust in customers
group cust by cust.City into custGroup
where custGroup.Count() > 2
orderby custGroup.Key
select custGroup;
Операции соединения создают связи между последовательностями, неявно смоделированными в источниках данных.
Метод расширения Join и соответствующее выражение запроса join
//Join extension method example
var customersAndCountries = customers.Join( companies,
cust => cust.CompanyName,
comp => comp.CompanyName,
cust, comp) =>
new {cust.FirstName,cust.LastName,comp.Country});
//join query operator example
var customersAndCountries1 = from cust in customers
join comp in companies on cust.CompanyName
equals comp.CompanyName
select new {cust.FirstName, cust.LastName, comp.Country};
Правила построения выражений запросов в linq. Аналогии с sql. Пример сложного выражения.
Составленное выражение запроса должно подчиняться следующим правилам:
Должно начинаться с конструкции from, которая указывает на обрабатываемую коллекцию
Может содержать ноль или более конструкции from, let или where. Может включать ноль или более конструкций orderby, с полями сортировки и необязательным указанием на направление упорядочивания. Направление может быть ascending или descending
Может включать ноль или более конструкций join.
Должна следовать конструкция select или group
Может следовать необязательная конструкция продолжения (такой конструкцией является into)
SQL оператор |
C# оператор |
Описание |
Select |
select |
Выбирает последовательность из контейнера |
From ... In |
from ... in |
Извлекает подмножество данных из контейнера. |
Join |
join ... in ... on ... equals ... |
Выполняет соединение на основе указанного ключа |
Where |
where |
Определяет ограничение для извлекаемых элементов |
Order By |
orderby -or- orderby ... descending |
Сортирует подмножество в порядке возрастания или убывания |
Group By |
group ... by -or- group ... by ... into |
Группирует подмножество по указанному значению |
Техническое задание на разработку информационной системы: основные разделы и их содержание.
ТЗ содержит следующие разделы, которые могут. б. разделены на подразделы:
1. “Общие сведения” указывают: -полное наименование системы и ее условное обозначение; -номер договора; -наименование компаний; -перечень документов; сроки создания системы; -финансирование; -порядок оформления и предъявления рез-тов.
2. “Назначение и цели создания системы” состоит из: -назначение системы; -цель; -вид деятельности системы и перечень объектов, на которых предполагается ее использовать.
-приводят значения показателей объекта, которые должны будут достигнуты в результате создания ИС, и указывают критерии оценки.
3. “Характеристика объекта информатизации”: -краткие сведения об объекте или ссылки на док-ты, содержание такую инфу; -сведения об условиях эксплуатации объекта
4. “Требования к системе”: -требования в целом; -требования к функциям; -требования к видам обеспечения.
5. “Состав и содержание работ по созданию системы”: -перечень стадий и этапов работ; -сроки выполнения; -перечень организаций - исполнителей работ; - ссылки на документы; подтверждение участия организации в создании системы
6. “Порядок контроля и приемки системы”: виды, состав, объем и методы испытаний системы и ее составных частей; общие требования к приему работ по стадиям, порядок согласования и утверждения приемочной документации.
7. “Требования к составу и содержанию работ по подготовке объекта автоматизации к вводу системы в действие”: перечень основных мероприятий и их исполнителей, которые следует выполнить при подготовке проекта к вводу ИС в действие.
8. “Требования к документированию”: -согласованный перечень подлежащих разработке комплектов и видов документов; -перечень документов, выпускаемых на машинных носителях.
9. “Источники разработки”. Перечисляются документы и информационные материалы, на основании которых разрабатывалось ТЗ и которые должны быть использованы при создании системы
Руководство программиста информационной системы: назначение документа, его разделы и их содержание.
Руководство программиста (ГОСТ 19.504-79) должно содержать след разделы:
1. Назначение и условия применения программы.
Указывается назначение и функции, выполняемые программой; условия необходимые для выполнения программы: объем оперативной памяти, требования к составу и параметрам ПУ, требования к ПО и т.д.
2. Характеристики программы.
Описываются основные характеристики и особенности программы: режимы работы, средства контроля правильности выполнения и самовосстановления программы и др.
3. Обращение к программе.
Рассматриваются процедуры вызова программы (способы передачи управления и параметры данных). При необходимости приводятся поясняющие примеры.
4. Входные и выходные данные.
Описываются: организация используемой входной и выходной информации, при необходимости – кодирование данной информации.
5. Сообщения.
Приводятся тексты сообщений, выдаваемых программисту или пользователю в ходе выполнения программы, описание их содержания и действий, которые необходимо предпринять по этим сообщениям.
Руководство пользователя информационной системы: назначение документа, его разделы и их содержание.
Руководство пользователя должно содержать след разделы:
1. Введение. Указывается:
- область применения и краткое описание возможностей;
- уровень подготовки пользователя;
- перечень документации, с которыми нужно ознакомиться пользователю.
2. Назначение и условия применения. Описываются:
- виды деятельности; задачи (функции), для решения которых предназначена программа;
- условия, при которых обеспечивается работа программы в соответствии с назначением.
3. Подготовка к работе. Рассматриваются:
- состав и содержание дистрибутивного носителя данных;
- порядок загрузки данных и программ;
- порядок проверки работоспособности разработанного ПО.
4. Описание операций. Указывают:
- описание всех выполняемых функций, задач, процедур;
- описание операций, которые необходимы для выполнения функций, задач, процедур.
Для операции приводят: наименование; условия выполнения операции; подготовительные действия; последовательность основных действий; заключительные действия; ресурсы, расходуемые на операцию. В описании действий допускаются ссылки на файлы подсказок.
5. Аварийные ситуации. Рассматриваются:
- действия в случае несоблюдения условий выполнения;
- действия по восстановлению программ и или данных при отказе носителей данных или обнаружении ошибок в данных;
- действия в случае обнаружения несанкционированного вмешательства в данные;
- действия в других аварийных ситуациях.
6. Рекомендации по освоению.
Приводятся: рекомендации по освоению и эксплуатации разработанного ПО.
