SlideShare a Scribd company logo
Темы лекции: Обзор веб-фреймворков.
Тренер: Игорь Шкулипа, к.т.н.
Разработка Веб-приложений на платформе
Microsoft .NET Framework.
Занятие 16
http://www.slideshare.net/IgorShkulipa 2
Bootstrap
http://bootstrap-ru.com/
Twitter Bootstrap - это фреймворк для создания современных, кросс-браузерных и
стандартизованных интерфейсов. Продуманная структура кода HTML, JavaScript
и CSS дает вам возможность создавать множество самых разнообразных
элементов интерфейса и сетку сайта.
Основные инструменты Bootstrap:
• Сетки — заранее заданные размеры колонок, которые можно сразу же
использовать, например ширина колонки 90px относится к классу .span2, который
мы можем использовать в CSS описании документа;
• Шаблоны — фиксированный или резиновый шаблон документа;
• Типографика — описания шрифтов, определение некоторых классов для
шрифтов таких как код, цитаты и т.п.;
• Медиа — представляет возможности управления изображениями и видео;
• Таблицы — средства оформления таблиц, вплоть до добавления
функциональности для обеспечения возможности сортировки;
• Формы — классы для оформления не только форм, но и некоторых событий
происходящих с ними;
• Навигация — классы оформления для вкладок, страниц, меню и панелей
инструментов;
• Алерты — оформление диалоговых окон, подсказок и всплывающих окон.
http://www.slideshare.net/IgorShkulipa 3
Компоненты Bootstrap
Все компоненты Bootstrap
http://www.slideshare.net/IgorShkulipa 4
Пример
<!DOCTYPE html>
<html>
<head>
<title>Bootstrap Example</title>
<link href="css/bootstrap.css" rel="stylesheet" media="screen">
</head>
<body>
<h1>Hello, World from Bootstrap</h1>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script src="js/bootstrap.min.js"></script>
<div class="tabbable">
<ul class="nav nav-tabs">
<li class="active"><a href="#tab1" data-toggle="tab">Tab 1</a></li>
<li><a href="#tab2" data-toggle="tab">Tab 2</a></li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab1">
<p>Hello from Tab 1</p>
</div>
<div class="tab-pane" id="tab2">
<p>Hello from Tab 2</p>
</div>
</div>
</div>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 5
Результат
http://www.slideshare.net/IgorShkulipa 6
AngularJS
AngularJS — JavaScript-фреймворк с открытым исходным кодом.
Предназначен для разработки одностраничных приложений. Его цель
— расширение браузерных приложений на основе MVC шаблона, а
также упрощение тестирования и разработки.
Фреймворк работает с HTML, содержащим дополнительные
пользовательские атрибуты, которые описываются директивами, и
связывает ввод или вывод области страницы с моделью,
представляющей собой обычные переменные JavaScript. Значения
этих переменных задаются вручную или извлекаются из статических
или динамических JSON-данных.
AngularJS спроектирован с убеждением, что декларативное
программирование лучше всего подходит для построения
пользовательских интерфейсов и описания программных
компонентов, в то время как императивное программирование
отлично подходит для описания бизнес-логики. Фреймворк
адаптирует и расширяет традиционный HTML, чтобы обеспечить
двустороннюю привязку данных для динамического контента, что
позволяет автоматически синхронизировать модель и представление.
В результате AngularJS уменьшает роль DOM-манипуляций и улучшает
тестируемость.
http://www.slideshare.net/IgorShkulipa 7
Популярные Angular-директивы
С помощью директив AngularJS можно создавать пользовательские HTML-
теги и атрибуты, чтобы добавить поведение некоторым элементам.
• ng-app - объявляет элемент корневым для приложения.
• ng-bind - автоматически заменяет текст HTML-элемента на значение
переданного выражения.
• ng-model - то же что и ng-bind, только обеспечивает двустороннее
связывание данных. Изменится содержимое элемента, ангуляр изменит
и значение модели. Изменится значение модели, ангуляр изменит
текст внутри элемента.
• ng-class - определяет классы для динамической загрузки.
• ng-controller - определяет JavaScript-контроллер для вычисления
HTML-выражений.
• ng-repeat - создает экземпляр для каждого элемента из коллекции.
http://www.slideshare.net/IgorShkulipa 8
Популярные Angular-директивы
• ng-show и ng-hide - показывает или скрывает элемент в зависимости
от значения логического выражения.
• ng-switch - создает экземпляр шаблона из множества вариантов, в
зависимости от значения выражения.
• ng-view - базовая директива, отвечает за обработку маршрутов,
которые принимают JSON перед отображением шаблонов,
управляемых указанными контроллерами.
http://www.slideshare.net/IgorShkulipa 9
Ссылки
http://angular.ru
http://habrahabr.ru/hub/angularjs/
http://metanit.com/web/angular/
http://www.slideshare.net/IgorShkulipa 10
Пример. Контроллеры (они же модели)
function HelloWorldController($scope) {
$scope.message = "Hello, World from AngularJS";
}
function PeopleController($scope) {
$scope.people = [
{
"name": "Ivan",
"middle":"Ivanovich",
"surname": "Ivanov",
"email":"ivan@ivanov.com"
},
{
"name": "Petr",
"middle": "Petrovich",
"surname": "Petrov",
"email": "petr@petrov.com"
},
{
"name": "Sidor",
"middle": "Sidorovich",
"surname": "Sidorov",
"email": "sidor@sidorov.com"
},
];
}
http://www.slideshare.net/IgorShkulipa 11
Пример. HTML
<!DOCTYPE html>
<html ng-app>
<head>
<title>AngularJS Example</title>
<link href="css/bootstrap.css" rel="stylesheet" media="screen">
<script src="js/angular.min.js"></script>
<script src="js/mc.js"></script>
</head>
<body>
<h1 ng-controller="HelloWorldController">{{message}}</h1>
<ul ng-controller="PeopleController">
<li ng-repeat="per in people">
{{per.name}}&nbsp;{{per.middle}}&nbsp;{{per.surname}}
&nbsp;-&nbsp;<strong>{{per.email}}</strong>
</li>
</ul>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 12
Результат
http://www.slideshare.net/IgorShkulipa 13
BackboneJS
BackboneJS — JavaScript-библиотека, основанная на шаблоне
проектирования Model-View-Presenter (MVP), предназначена для
разработки веб-приложений с поддержкой RESTful JSON интерфейса.
Backbone — очень лёгкая библиотека (упакованная и gzip-сжатая 6.3 Кб),
но для работы необходима библиотека Underscore.js, а для
поддержки REST API и работы с DOM элементами рекомендуется
подключить jQuery-подобную библиотеку: jQuery или Zepto.
Backbone.js создан Джереми Ашкенасом, который известен также как
создатель CoffeeScript.
Проект размещается на GitHub, с доступным аннотированным исходным
кодом, с онлайновыми тестами с примером приложения, со списком
туториалов и списком реальных проектов, которые используют
Backbone. Backbone доступен под лицензией MIT.
http://www.slideshare.net/IgorShkulipa 14
Каталог встроенных событий
• "add" (model, collection, options) — когда модель добавляется в коллекцию.
• "remove" (model, collection, options) — когда модель удаляется из коллекции.
• "reset" (collection, options) — когда всё содержимое коллекции заменяется.
• "sort" (collection, options) — когда коллекция была отсортирована.
• "change" (model, options) — когда атрибут модели меняется.
• "change:[attribute]" (model, value, options) — когда меняется конкретный
атрибут модели.
• "destroy" (model, collection, options) — когда модель уничтожена.
• "request" (model, xhr, options) — когда модель (или коллекция) отправляет
запрос на сервер.
• "sync" (model, resp, options) — когда модель была успешно синхронизирована с
сервером.
http://www.slideshare.net/IgorShkulipa 15
Каталог встроенных событий
• "error" (model, xhr, options) — когда вызов save провалился на
сервере.
• "invalid" (model, error, options) — модель не прошла валидацию на
клиенте.
• "route:[name]" (params) — когда один конкретный роут находит
соответствие.
• "route" (router, route, params) — когда любой из роутов находит
соответствие.
• "all" — это специальное событие срабатывает каждый раз, когда
срабатывает любое событие, передавая имя события первым
аргументом.
http://www.slideshare.net/IgorShkulipa 16
Backbone.Model
Модели содержат как интерактивные данные, так и большую часть
соответствующей логики: конвертации, валидации, вычисленные
свойства и контроль доступа.
Вы расширяете Backbone.Model методами своей предметной области, а
Model предоставляет базовый набор функциональности по управлению
изменениями.
http://www.slideshare.net/IgorShkulipa 17
Ссылки
http://backbonejs.org/
http://backbonejs.ru/
http://habrahabr.ru/post/127049/
https://github.com/kulakowka/Backbone.js-Russian
http://www.slideshare.net/IgorShkulipa 18
Пример. Заголовок
<!DOCTYPE html>
<html>
<head>
<title>BackboneJS Example</title>
<link href="css/bootstrap.css" rel="stylesheet"
media="screen">
<script src="js/jquery-1.9.1.min.js"></script>
<script src="js/underscore.js"></script>
<script src="js/backbone.js"></script>
</head>
<body>
<h1>Hello, World from BackboneJS</h1>
<div id="maindiv">
</div>
http://www.slideshare.net/IgorShkulipa 19
Пример. Шаблон представления
<script type="text/template" id="maintemplate">
<ul>
<% People.each( function(per) { %>
<li>
<%= per.get("name") %>&nbsp;
<%= per.get("middle") %>&nbsp;
<%= per.get("surname") %> -<strong>
<%= per.get("email") %></strong>
</li>
<% }); %>
</ul>
</script>
http://www.slideshare.net/IgorShkulipa 20
Пример. Модель и остальное
<script type="text/javascript">
var Persone = Backbone.Model.extend({
defaults: {
name: "Name",
middle: "Middle",
surname: "Surname",
email: "address@domain.com"
}
});
var PeopleList = Backbone.Collection.extend({
models: Persone
});
var People = new PeopleList([
new Persone({ name: "Ivan", middle: "Ivanovich",
surname: "Ivanov", email: "ivan@ivanov.com" }),
new Persone({ name: "Petr", middle: "Petrovich",
surname: "Petrov", email: "petr@petrov.com" }),
new Persone({ name: "Sidor", middle: "Sidorovich",
surname: "Sidorov", email: "sidor@sidorov.com" })
]);
http://www.slideshare.net/IgorShkulipa 21
Пример. Модель и остальное
var MainView = Backbone.View.extend({
el: "#maindiv",
initialize: function () {
this.render();
},
render: function () {
var templ = _.template($("#maintemplate").html(),
{ People: People.models });
$("#maindiv").html(templ);
return this;
}
});
var mv = new MainView();
</script>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 22
Результат
http://www.slideshare.net/IgorShkulipa 23
KnockoutJS
Knockout использует архитектуру (MVVM) Модель - Представление -
Модель представления.
Элементы страницы, из которых она будет состоять, могут быть
помещены в представление.
Сами данные, которые будут отображаться, могут быть представлены в
модели.
Третий компонент, модель представления, - это по сути состояние
интерфейса в данный момент времени (комбинация данных и
представления с уже применёнными интерактивными элементами).
http://www.slideshare.net/IgorShkulipa 24
Ссылки
http://knockoutjs.com/
https://github.com/knockout/knockout
http://www.slideshare.net/IgorShkulipa 25
Пример. ViewModel
function persone(nam, mid, surn, em) {
this.name = ko.observable(nam);
this.middle = ko.observable(mid);
this.surname = ko.observable(surn);
this.email = ko.observable(em);
this.fullname = ko.pureComputed({
read: function () {
return this.name() + " " +
this.middle() + " " +
this.surname();
},
write: function (value) {
var iFirstSpace = value.indexOf(" ");
var iSecondSpace = value.lastIndexOf(" ");
if ((iFirstSpace > 0)&&(iSecondSpace>0)) {
this.name(value.substring(0, iFirstSpace));
this.middle(value.substring(iFirstSpace+1, iSecondSpace));
this.surname(value.substring(iSecondSpace+1));
}
},
owner: this
});
return this;
}
http://www.slideshare.net/IgorShkulipa 26
Пример. ViewModel
var HelloWorldViewModel = {
message: "Hello, World from KnockoutJS",
people: ko.observableArray([
new persone("Ivan", "Ivanovich", "Ivanov", "ivan@ivanov.com"),
new persone("Petr", "Petrovich", "Petrov", "petr@petrov.com"),
new persone("Sidor", "Sidorovich", "Sidorov", "sidor@sidorov.com")
])
}
http://www.slideshare.net/IgorShkulipa 27
Пример. HTML
<!DOCTYPE html>
<html>
<head>
<title>KnockoutJS Example</title>
<link href="css/bootstrap.css" rel="stylesheet" media="screen">
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/knockout-3.2.0.js"></script>
<script type="text/javascript" src="js/mc.js"></script>
</head>
<body>
<h1 data-bind="text:HelloWorldViewModel.message" ></h1>
<table>
<thead>
<tr><th>Name</th><th>Middle</th><th>Surname</th>
<th>E-Mail</th><th>Full Name</th></tr>
</thead>
<tbody data-bind="foreach: HelloWorldViewModel.people">
<tr>
<td><input data-bind="value: name"/></td>
<td><input data-bind="value: middle"/></td>
<td><input data-bind="value: surname"/></td>
<td><input data-bind="value: email"/></td>
<td><input data-bind="value: fullname"/></td>
</tr>
</tbody>
</table>
<script type="text/javascript">
ko.applyBindings(HelloWorldViewModel);
</script>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 28
Результат
http://www.slideshare.net/IgorShkulipa 29
Knockout в MVC проекте
http://knockoutmvc.com/
http://www.slideshare.net/IgorShkulipa 30
KnockoutMVC
http://www.slideshare.net/IgorShkulipa 31
KnockoutMVC
http://www.slideshare.net/IgorShkulipa 32
Пример. Скрипты
@Scripts.Render("~/Scripts/jquery-2.1.1.min.js")
@Scripts.Render("~/Scripts/knockout-3.1.0.js")
@Scripts.Render("~/Scripts/knockout.mapping-latest.js")
@Scripts.Render("~/Scripts/perpetuum.knockout.js")
http://www.slideshare.net/IgorShkulipa 33
Пример. Модель
public class Persone {
public string Name { get; set; }
public string Middle { get; set; }
public string Surname { get; set; }
public string Email { get; set; }
public string FullName {
get {
return Name + " " + Middle + " " + Surname;
}
set {
var iFirstSpace = value.IndexOf(" ");
var iSecondSpace = value.LastIndexOf(" ");
if ((iFirstSpace > 0) && (iSecondSpace > 0))
{
this.Name = value.Substring(0, iFirstSpace);
this.Middle = value.Substring(iFirstSpace + 1,
iSecondSpace);
this.Surname = value.Substring(iSecondSpace + 1);
} } } }
public class HelloWorldViewModel {
public string Message { get; set; }
public List<Persone> People { get; set; }
}
http://www.slideshare.net/IgorShkulipa 34
Пример. Контроллер
public class HomeController : Controller
{
public static HelloWorldViewModel ViewModel = new HelloWorldViewModel
{
Message = "Hello, World from KnockoutMVC",
People =new List<Persone>{
new Persone{Name="Ivan", Middle="Ivanovich",
Surname="Ivanov", Email="ivan@ivanov.com"},
new Persone{Name="Petr", Middle="Petrovich",
Surname="Petrov", Email="petr@petrov.com"},
new Persone{Name="Sidor", Middle="Sidorovich",
Surname="Sidorov", Email="sidor@sidorov.com"}
}};
public ActionResult Index()
{
return View(ViewModel);
}
...
}
http://www.slideshare.net/IgorShkulipa 35
Пример. Представление
@model KnockoutMVC.Controllers.HelloWorldViewModel
@using PerpetuumSoft.Knockout
@{
ViewBag.Title = "KnockoutMVC Example";
}
@{
var ko = Html.CreateKnockoutContext();
}
<h1>@ko.Html.Span(m => m.Message)</h1>
<div>
<table style="width:100%">
<thead>
<tr><th>Name</th><th>Middle</th><th>Surname</th
>
<th>E-Mail</th><th>Full Name</th></tr>
</thead>
http://www.slideshare.net/IgorShkulipa 36
Пример. Представление
<tbody>
@using (var people = ko.Foreach(m => m.People))
{
<tr>
<td style="width:20%">
@people.Html.TextBox(per => per.Name,
new { style = "width:auto" })</td>
<td style="width:20%">
@people.Html.TextBox(per => per.Middle,
new { style = "width:auto" })</td>
<td style="width:20%">
@people.Html.TextBox(per => per.Surname,
new { style = "width:auto" })</td>
<td style="width:20%">
@people.Html.TextBox(per => per.Email,
new { style = "width:auto" })</td>
<td style="width:20%">
@people.Html.TextBox(per => per.FullName,
new { style = "width:auto" })</td>
</tr>
}
</tbody>
</table></div>
@ko.Apply(Model)
http://www.slideshare.net/IgorShkulipa 37
Результат
http://www.slideshare.net/IgorShkulipa 38
NodeJS
Node или Node.js — программная платформа, основанная на движке V8
(транслирующем JavaScript в машинный код), превращающая JavaScript из
узкоспециализированного языка в язык общего назначения.
Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода-
вывода через свой API (написанный на C++), подключать другие внешние
библиотеки, написанные на разных языках, обеспечивая вызовы к ним из
JavaScript-кода.
Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но
есть возможность разрабатывать на Node.js и десктопные оконные приложения
(при помощи node-webkit и AppJS для Linux, Windows и Mac OS) и даже
программировать микроконтроллеры (например, tessel и espruino). В основе
Node.js лежит событийно-ориентированное и асинхронное (или реактивное)
программирование с неблокирующим вводом/выводом.
Node разработал Райан Дал (англ. Ryan Dahl) в 2009 году после двух лет
экспериментирования над созданием серверных веб-компонентов. В ходе своих
исследований он пришёл к выводу, что вместо традиционной модели
параллелизма на основе потоков следует обратиться к событийно-
ориентированным системам. Эта модель была выбрана из-за простоты, низких
накладных расходов (по сравнению с идеологией «один поток на каждое
соединение») и быстродействия. Целью Node является предложить «простой
способ построения масштабируемых сетевых серверов».
http://www.slideshare.net/IgorShkulipa 39
Ссылки
http://nodejs.org/
http://www.nodebeginner.ru/
http://www.slideshare.net/IgorShkulipa 40
Пример. Самый простой сервер
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, { “Content-Type”: “text/plain” });
response.end("Hello, World from NodeJS");
}).listen(12345);
http://www.slideshare.net/IgorShkulipa 41
Пример. Сервер немного сложнее
var http = require("http");
http.createServer(function (request, response) {
response.writeHead(200, { “Content-Type”: “text/html” });
response.write("<!DOCTYPE html><html><head>");
response.write("<title>"+"NodeJS Example"+"</title>");
response.write("</head><body>");
response.write("<h1>"+"Hello, World from NodeJS"+"</h1>");
response.end("</body></html>");
}).listen(12345);
http://www.slideshare.net/IgorShkulipa 42
Пример. Сервер еще немного сложнее
var http = require("http");
var fs = require("fs");
http.createServer(function (request, response) {
var index = fs.readFileSync("./index.html");
response.writeHead(200,
{ “Content-Type”: “text/html” });
response.end(index);
}).listen(12345);
Index.html
<!DOCTYPE html>
<html>
<head>
<title>NodeJS Example</title>
</head>
<body>
<h1>Hello, World from NodeJS</h1>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 43
Пример. Сервер еще чуть-чуть сложнее
var http = require("http");
var url = require("url");
var fs = require("fs");
function Respond(request, response) {
var pathname = url.parse(request.url).pathname;
var index = fs.readFileSync("./" + pathname);
response.writeHead(200, { “Content-Type”: “text/html” });
response.end(index);
}
http.createServer(Respond).listen(12345);
Index.html
<!DOCTYPE html>
<html>
<head>
<title>NodeJS Example</title>
</head>
<body>
<h1>Hello, World from NodeJS</h1>
</body>
</html>
Index2.html
<!DOCTYPE html>
<html>
<head>
<title>NodeJS Example</title>
</head>
<body>
<h1>Hello, World from NodeJS and Index2</h1>
</body>
</html>
http://www.slideshare.net/IgorShkulipa 44
Результат

More Related Content

PDF
Общие темы. Тема 01.
PDF
Общие темы. Тема 02.
PDF
C# Web. Занятие 09.
PPT
Базовые принципы и понятия технологии разработки объектно-ориентированных инф...
PDF
Модифицируемость программных систем
PPT
Диаграмма развертывания
PDF
Практический анализ и визуальное моделирование на UML
PDF
Тимур Лукин - Архитектура и проектирование ПО
Общие темы. Тема 01.
Общие темы. Тема 02.
C# Web. Занятие 09.
Базовые принципы и понятия технологии разработки объектно-ориентированных инф...
Модифицируемость программных систем
Диаграмма развертывания
Практический анализ и визуальное моделирование на UML
Тимур Лукин - Архитектура и проектирование ПО

What's hot (20)

PPTX
07 Архитектура информационных систем. Принципы GRASP
PDF
Практикум Web программирование
PPT
Работа в команде, управление программными проектами
PPTX
Расширяемая платформа для создания и управления автоматизированными тестами н...
PPTX
PDF
Сборник практических задании по Php
PPTX
Views обзор
PPT
Диаграмма компонентов
PDF
Паттерны проектирования
PDF
C++ осень 2012 лекция 8
DOCX
Excel для практиков
PPTX
метод организации репозитория исходного кода
PPTX
МиСПИСиТ (тестирование и отладка)
PDF
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
PPT
Принципы SOLID
PPTX
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
PPT
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
07 Архитектура информационных систем. Принципы GRASP
Практикум Web программирование
Работа в команде, управление программными проектами
Расширяемая платформа для создания и управления автоматизированными тестами н...
Сборник практических задании по Php
Views обзор
Диаграмма компонентов
Паттерны проектирования
C++ осень 2012 лекция 8
Excel для практиков
метод организации репозитория исходного кода
МиСПИСиТ (тестирование и отладка)
REQ Labs 2014. Smart Business Modelling: A Key to Success in Enterprise Autom...
Принципы SOLID
Оптимизация производительности и нагрузочное тестирование в среде Visual Stud...
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Ad

Viewers also liked (19)

DOC
PRES Eve's Dream
PDF
Challenge Passport-sm
PPTX
amazing animals
PDF
JavaScript Базовый. Занятие 09.
PDF
C# Web. Занятие 12.
PDF
C# Web. Занятие 03.
PDF
C++ STL & Qt. Занятие 07.
DOCX
Capítulo iii correcion
PDF
Vijay bhosekar published article organic agriculture
PPTX
Production diary 8
PDF
PPC Masters February 2015
PDF
JavaScript Базовый. Занятие 05.
PPTX
Nowhere But Niigata
PPTX
Laura mulvey’s male gaze theory
PPTX
objetos
PPTX
MME 2016
PDF
InPay OpenReaktor
PDF
C# Desktop. Занятие 02.
PDF
InPay SA Kongres Mobilny 2015
PRES Eve's Dream
Challenge Passport-sm
amazing animals
JavaScript Базовый. Занятие 09.
C# Web. Занятие 12.
C# Web. Занятие 03.
C++ STL & Qt. Занятие 07.
Capítulo iii correcion
Vijay bhosekar published article organic agriculture
Production diary 8
PPC Masters February 2015
JavaScript Базовый. Занятие 05.
Nowhere But Niigata
Laura mulvey’s male gaze theory
objetos
MME 2016
InPay OpenReaktor
C# Desktop. Занятие 02.
InPay SA Kongres Mobilny 2015
Ad

Similar to C# Web. Занятие 16. (20)

PPTX
ASP.NET, MVC, ASP.NET MVC
PDF
09 - Web-технологии. MVC фреймворки
PDF
Лекция #6. Введение в Django web-framework
PPTX
ASP.NET MVC
PPT
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
PDF
C# Web. Занятие 01.
PPTX
История развития и применения CMS: Drupal и другие
PDF
The Old New ASP.NET
PDF
Dreamwever cs3
PDF
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
PDF
Grails & Groovy
PDF
Разработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA Consulting
PDF
20160323 Пример бизнес-приложения контроля качества в розничной торговле
PDF
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
PPT
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
PPT
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
PPT
Проектирование пользовательских интерфейсов в компании EPAM Systems
PPT
ASP.NET MVC: new era?
ASP.NET, MVC, ASP.NET MVC
09 - Web-технологии. MVC фреймворки
Лекция #6. Введение в Django web-framework
ASP.NET MVC
Технология создания веб-сервисов на базе стандарта JAX-WS & JAXB
C# Web. Занятие 01.
История развития и применения CMS: Drupal и другие
The Old New ASP.NET
Dreamwever cs3
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Grails & Groovy
Разработка бизнес-приложений на OpenUI5 — Николай Надоричев, MOLGA Consulting
20160323 Пример бизнес-приложения контроля качества в розничной торговле
Разработка бизнес приложений на OpenUI5. Николай Надоричев. MoscowJS 14
Agile Java Development компания JazzTeam - Техническая презентация Xml2Selenium
Solit 2013, Разбор конкретного примера – продукта XML2Selenium, Горячко Дмитрий
Проектирование пользовательских интерфейсов в компании EPAM Systems
ASP.NET MVC: new era?

More from Igor Shkulipa (20)

PDF
Общие темы. Тема 03.
PDF
JavaScript Базовый. Занятие 06.
PDF
JavaScript Базовый. Занятие 11.
PDF
JavaScript Базовый. Занятие 10.
PDF
JavaScript Базовый. Занятие 08.
PDF
JavaScript Базовый. Занятие 07.
PDF
JavaScript Базовый. Занятие 01.
PDF
JavaScript Базовый. Занятие 04.
PDF
JavaScript Базовый. Занятие 03.
PDF
JavaScript Базовый. Занятие 02.
PDF
C# Web. Занятие 08.
PDF
C# Web. Занятие 07.
PDF
C# Web. Занятие 04.
PDF
C# Web. Занятие 14.
PDF
C# Web. Занятие 15.
PDF
C# Web. Занятие 13.
PDF
C# Web. Занятие 11.
PDF
C# Web. Занятие 10.
PDF
C# Web. Занятие 05.
PDF
C# Web. Занятие 06.
Общие темы. Тема 03.
JavaScript Базовый. Занятие 06.
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 10.
JavaScript Базовый. Занятие 08.
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 01.
JavaScript Базовый. Занятие 04.
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 02.
C# Web. Занятие 08.
C# Web. Занятие 07.
C# Web. Занятие 04.
C# Web. Занятие 14.
C# Web. Занятие 15.
C# Web. Занятие 13.
C# Web. Занятие 11.
C# Web. Занятие 10.
C# Web. Занятие 05.
C# Web. Занятие 06.

C# Web. Занятие 16.

  • 1. Темы лекции: Обзор веб-фреймворков. Тренер: Игорь Шкулипа, к.т.н. Разработка Веб-приложений на платформе Microsoft .NET Framework. Занятие 16
  • 2. http://www.slideshare.net/IgorShkulipa 2 Bootstrap http://bootstrap-ru.com/ Twitter Bootstrap - это фреймворк для создания современных, кросс-браузерных и стандартизованных интерфейсов. Продуманная структура кода HTML, JavaScript и CSS дает вам возможность создавать множество самых разнообразных элементов интерфейса и сетку сайта. Основные инструменты Bootstrap: • Сетки — заранее заданные размеры колонок, которые можно сразу же использовать, например ширина колонки 90px относится к классу .span2, который мы можем использовать в CSS описании документа; • Шаблоны — фиксированный или резиновый шаблон документа; • Типографика — описания шрифтов, определение некоторых классов для шрифтов таких как код, цитаты и т.п.; • Медиа — представляет возможности управления изображениями и видео; • Таблицы — средства оформления таблиц, вплоть до добавления функциональности для обеспечения возможности сортировки; • Формы — классы для оформления не только форм, но и некоторых событий происходящих с ними; • Навигация — классы оформления для вкладок, страниц, меню и панелей инструментов; • Алерты — оформление диалоговых окон, подсказок и всплывающих окон.
  • 4. http://www.slideshare.net/IgorShkulipa 4 Пример <!DOCTYPE html> <html> <head> <title>Bootstrap Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> </head> <body> <h1>Hello, World from Bootstrap</h1> <script src="http://code.jquery.com/jquery-latest.js"></script> <script src="js/bootstrap.min.js"></script> <div class="tabbable"> <ul class="nav nav-tabs"> <li class="active"><a href="#tab1" data-toggle="tab">Tab 1</a></li> <li><a href="#tab2" data-toggle="tab">Tab 2</a></li> </ul> <div class="tab-content"> <div class="tab-pane active" id="tab1"> <p>Hello from Tab 1</p> </div> <div class="tab-pane" id="tab2"> <p>Hello from Tab 2</p> </div> </div> </div> </body> </html>
  • 6. http://www.slideshare.net/IgorShkulipa 6 AngularJS AngularJS — JavaScript-фреймворк с открытым исходным кодом. Предназначен для разработки одностраничных приложений. Его цель — расширение браузерных приложений на основе MVC шаблона, а также упрощение тестирования и разработки. Фреймворк работает с HTML, содержащим дополнительные пользовательские атрибуты, которые описываются директивами, и связывает ввод или вывод области страницы с моделью, представляющей собой обычные переменные JavaScript. Значения этих переменных задаются вручную или извлекаются из статических или динамических JSON-данных. AngularJS спроектирован с убеждением, что декларативное программирование лучше всего подходит для построения пользовательских интерфейсов и описания программных компонентов, в то время как императивное программирование отлично подходит для описания бизнес-логики. Фреймворк адаптирует и расширяет традиционный HTML, чтобы обеспечить двустороннюю привязку данных для динамического контента, что позволяет автоматически синхронизировать модель и представление. В результате AngularJS уменьшает роль DOM-манипуляций и улучшает тестируемость.
  • 7. http://www.slideshare.net/IgorShkulipa 7 Популярные Angular-директивы С помощью директив AngularJS можно создавать пользовательские HTML- теги и атрибуты, чтобы добавить поведение некоторым элементам. • ng-app - объявляет элемент корневым для приложения. • ng-bind - автоматически заменяет текст HTML-элемента на значение переданного выражения. • ng-model - то же что и ng-bind, только обеспечивает двустороннее связывание данных. Изменится содержимое элемента, ангуляр изменит и значение модели. Изменится значение модели, ангуляр изменит текст внутри элемента. • ng-class - определяет классы для динамической загрузки. • ng-controller - определяет JavaScript-контроллер для вычисления HTML-выражений. • ng-repeat - создает экземпляр для каждого элемента из коллекции.
  • 8. http://www.slideshare.net/IgorShkulipa 8 Популярные Angular-директивы • ng-show и ng-hide - показывает или скрывает элемент в зависимости от значения логического выражения. • ng-switch - создает экземпляр шаблона из множества вариантов, в зависимости от значения выражения. • ng-view - базовая директива, отвечает за обработку маршрутов, которые принимают JSON перед отображением шаблонов, управляемых указанными контроллерами.
  • 10. http://www.slideshare.net/IgorShkulipa 10 Пример. Контроллеры (они же модели) function HelloWorldController($scope) { $scope.message = "Hello, World from AngularJS"; } function PeopleController($scope) { $scope.people = [ { "name": "Ivan", "middle":"Ivanovich", "surname": "Ivanov", "email":"ivan@ivanov.com" }, { "name": "Petr", "middle": "Petrovich", "surname": "Petrov", "email": "petr@petrov.com" }, { "name": "Sidor", "middle": "Sidorovich", "surname": "Sidorov", "email": "sidor@sidorov.com" }, ]; }
  • 11. http://www.slideshare.net/IgorShkulipa 11 Пример. HTML <!DOCTYPE html> <html ng-app> <head> <title>AngularJS Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> <script src="js/angular.min.js"></script> <script src="js/mc.js"></script> </head> <body> <h1 ng-controller="HelloWorldController">{{message}}</h1> <ul ng-controller="PeopleController"> <li ng-repeat="per in people"> {{per.name}}&nbsp;{{per.middle}}&nbsp;{{per.surname}} &nbsp;-&nbsp;<strong>{{per.email}}</strong> </li> </ul> </body> </html>
  • 13. http://www.slideshare.net/IgorShkulipa 13 BackboneJS BackboneJS — JavaScript-библиотека, основанная на шаблоне проектирования Model-View-Presenter (MVP), предназначена для разработки веб-приложений с поддержкой RESTful JSON интерфейса. Backbone — очень лёгкая библиотека (упакованная и gzip-сжатая 6.3 Кб), но для работы необходима библиотека Underscore.js, а для поддержки REST API и работы с DOM элементами рекомендуется подключить jQuery-подобную библиотеку: jQuery или Zepto. Backbone.js создан Джереми Ашкенасом, который известен также как создатель CoffeeScript. Проект размещается на GitHub, с доступным аннотированным исходным кодом, с онлайновыми тестами с примером приложения, со списком туториалов и списком реальных проектов, которые используют Backbone. Backbone доступен под лицензией MIT.
  • 14. http://www.slideshare.net/IgorShkulipa 14 Каталог встроенных событий • "add" (model, collection, options) — когда модель добавляется в коллекцию. • "remove" (model, collection, options) — когда модель удаляется из коллекции. • "reset" (collection, options) — когда всё содержимое коллекции заменяется. • "sort" (collection, options) — когда коллекция была отсортирована. • "change" (model, options) — когда атрибут модели меняется. • "change:[attribute]" (model, value, options) — когда меняется конкретный атрибут модели. • "destroy" (model, collection, options) — когда модель уничтожена. • "request" (model, xhr, options) — когда модель (или коллекция) отправляет запрос на сервер. • "sync" (model, resp, options) — когда модель была успешно синхронизирована с сервером.
  • 15. http://www.slideshare.net/IgorShkulipa 15 Каталог встроенных событий • "error" (model, xhr, options) — когда вызов save провалился на сервере. • "invalid" (model, error, options) — модель не прошла валидацию на клиенте. • "route:[name]" (params) — когда один конкретный роут находит соответствие. • "route" (router, route, params) — когда любой из роутов находит соответствие. • "all" — это специальное событие срабатывает каждый раз, когда срабатывает любое событие, передавая имя события первым аргументом.
  • 16. http://www.slideshare.net/IgorShkulipa 16 Backbone.Model Модели содержат как интерактивные данные, так и большую часть соответствующей логики: конвертации, валидации, вычисленные свойства и контроль доступа. Вы расширяете Backbone.Model методами своей предметной области, а Model предоставляет базовый набор функциональности по управлению изменениями.
  • 18. http://www.slideshare.net/IgorShkulipa 18 Пример. Заголовок <!DOCTYPE html> <html> <head> <title>BackboneJS Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> <script src="js/jquery-1.9.1.min.js"></script> <script src="js/underscore.js"></script> <script src="js/backbone.js"></script> </head> <body> <h1>Hello, World from BackboneJS</h1> <div id="maindiv"> </div>
  • 19. http://www.slideshare.net/IgorShkulipa 19 Пример. Шаблон представления <script type="text/template" id="maintemplate"> <ul> <% People.each( function(per) { %> <li> <%= per.get("name") %>&nbsp; <%= per.get("middle") %>&nbsp; <%= per.get("surname") %> -<strong> <%= per.get("email") %></strong> </li> <% }); %> </ul> </script>
  • 20. http://www.slideshare.net/IgorShkulipa 20 Пример. Модель и остальное <script type="text/javascript"> var Persone = Backbone.Model.extend({ defaults: { name: "Name", middle: "Middle", surname: "Surname", email: "address@domain.com" } }); var PeopleList = Backbone.Collection.extend({ models: Persone }); var People = new PeopleList([ new Persone({ name: "Ivan", middle: "Ivanovich", surname: "Ivanov", email: "ivan@ivanov.com" }), new Persone({ name: "Petr", middle: "Petrovich", surname: "Petrov", email: "petr@petrov.com" }), new Persone({ name: "Sidor", middle: "Sidorovich", surname: "Sidorov", email: "sidor@sidorov.com" }) ]);
  • 21. http://www.slideshare.net/IgorShkulipa 21 Пример. Модель и остальное var MainView = Backbone.View.extend({ el: "#maindiv", initialize: function () { this.render(); }, render: function () { var templ = _.template($("#maintemplate").html(), { People: People.models }); $("#maindiv").html(templ); return this; } }); var mv = new MainView(); </script> </body> </html>
  • 23. http://www.slideshare.net/IgorShkulipa 23 KnockoutJS Knockout использует архитектуру (MVVM) Модель - Представление - Модель представления. Элементы страницы, из которых она будет состоять, могут быть помещены в представление. Сами данные, которые будут отображаться, могут быть представлены в модели. Третий компонент, модель представления, - это по сути состояние интерфейса в данный момент времени (комбинация данных и представления с уже применёнными интерактивными элементами).
  • 25. http://www.slideshare.net/IgorShkulipa 25 Пример. ViewModel function persone(nam, mid, surn, em) { this.name = ko.observable(nam); this.middle = ko.observable(mid); this.surname = ko.observable(surn); this.email = ko.observable(em); this.fullname = ko.pureComputed({ read: function () { return this.name() + " " + this.middle() + " " + this.surname(); }, write: function (value) { var iFirstSpace = value.indexOf(" "); var iSecondSpace = value.lastIndexOf(" "); if ((iFirstSpace > 0)&&(iSecondSpace>0)) { this.name(value.substring(0, iFirstSpace)); this.middle(value.substring(iFirstSpace+1, iSecondSpace)); this.surname(value.substring(iSecondSpace+1)); } }, owner: this }); return this; }
  • 26. http://www.slideshare.net/IgorShkulipa 26 Пример. ViewModel var HelloWorldViewModel = { message: "Hello, World from KnockoutJS", people: ko.observableArray([ new persone("Ivan", "Ivanovich", "Ivanov", "ivan@ivanov.com"), new persone("Petr", "Petrovich", "Petrov", "petr@petrov.com"), new persone("Sidor", "Sidorovich", "Sidorov", "sidor@sidorov.com") ]) }
  • 27. http://www.slideshare.net/IgorShkulipa 27 Пример. HTML <!DOCTYPE html> <html> <head> <title>KnockoutJS Example</title> <link href="css/bootstrap.css" rel="stylesheet" media="screen"> <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script> <script type="text/javascript" src="js/knockout-3.2.0.js"></script> <script type="text/javascript" src="js/mc.js"></script> </head> <body> <h1 data-bind="text:HelloWorldViewModel.message" ></h1> <table> <thead> <tr><th>Name</th><th>Middle</th><th>Surname</th> <th>E-Mail</th><th>Full Name</th></tr> </thead> <tbody data-bind="foreach: HelloWorldViewModel.people"> <tr> <td><input data-bind="value: name"/></td> <td><input data-bind="value: middle"/></td> <td><input data-bind="value: surname"/></td> <td><input data-bind="value: email"/></td> <td><input data-bind="value: fullname"/></td> </tr> </tbody> </table> <script type="text/javascript"> ko.applyBindings(HelloWorldViewModel); </script> </body> </html>
  • 29. http://www.slideshare.net/IgorShkulipa 29 Knockout в MVC проекте http://knockoutmvc.com/
  • 33. http://www.slideshare.net/IgorShkulipa 33 Пример. Модель public class Persone { public string Name { get; set; } public string Middle { get; set; } public string Surname { get; set; } public string Email { get; set; } public string FullName { get { return Name + " " + Middle + " " + Surname; } set { var iFirstSpace = value.IndexOf(" "); var iSecondSpace = value.LastIndexOf(" "); if ((iFirstSpace > 0) && (iSecondSpace > 0)) { this.Name = value.Substring(0, iFirstSpace); this.Middle = value.Substring(iFirstSpace + 1, iSecondSpace); this.Surname = value.Substring(iSecondSpace + 1); } } } } public class HelloWorldViewModel { public string Message { get; set; } public List<Persone> People { get; set; } }
  • 34. http://www.slideshare.net/IgorShkulipa 34 Пример. Контроллер public class HomeController : Controller { public static HelloWorldViewModel ViewModel = new HelloWorldViewModel { Message = "Hello, World from KnockoutMVC", People =new List<Persone>{ new Persone{Name="Ivan", Middle="Ivanovich", Surname="Ivanov", Email="ivan@ivanov.com"}, new Persone{Name="Petr", Middle="Petrovich", Surname="Petrov", Email="petr@petrov.com"}, new Persone{Name="Sidor", Middle="Sidorovich", Surname="Sidorov", Email="sidor@sidorov.com"} }}; public ActionResult Index() { return View(ViewModel); } ... }
  • 35. http://www.slideshare.net/IgorShkulipa 35 Пример. Представление @model KnockoutMVC.Controllers.HelloWorldViewModel @using PerpetuumSoft.Knockout @{ ViewBag.Title = "KnockoutMVC Example"; } @{ var ko = Html.CreateKnockoutContext(); } <h1>@ko.Html.Span(m => m.Message)</h1> <div> <table style="width:100%"> <thead> <tr><th>Name</th><th>Middle</th><th>Surname</th > <th>E-Mail</th><th>Full Name</th></tr> </thead>
  • 36. http://www.slideshare.net/IgorShkulipa 36 Пример. Представление <tbody> @using (var people = ko.Foreach(m => m.People)) { <tr> <td style="width:20%"> @people.Html.TextBox(per => per.Name, new { style = "width:auto" })</td> <td style="width:20%"> @people.Html.TextBox(per => per.Middle, new { style = "width:auto" })</td> <td style="width:20%"> @people.Html.TextBox(per => per.Surname, new { style = "width:auto" })</td> <td style="width:20%"> @people.Html.TextBox(per => per.Email, new { style = "width:auto" })</td> <td style="width:20%"> @people.Html.TextBox(per => per.FullName, new { style = "width:auto" })</td> </tr> } </tbody> </table></div> @ko.Apply(Model)
  • 38. http://www.slideshare.net/IgorShkulipa 38 NodeJS Node или Node.js — программная платформа, основанная на движке V8 (транслирующем JavaScript в машинный код), превращающая JavaScript из узкоспециализированного языка в язык общего назначения. Node.js добавляет возможность JavaScript взаимодействовать с устройствами ввода- вывода через свой API (написанный на C++), подключать другие внешние библиотеки, написанные на разных языках, обеспечивая вызовы к ним из JavaScript-кода. Node.js применяется преимущественно на сервере, выполняя роль веб-сервера, но есть возможность разрабатывать на Node.js и десктопные оконные приложения (при помощи node-webkit и AppJS для Linux, Windows и Mac OS) и даже программировать микроконтроллеры (например, tessel и espruino). В основе Node.js лежит событийно-ориентированное и асинхронное (или реактивное) программирование с неблокирующим вводом/выводом. Node разработал Райан Дал (англ. Ryan Dahl) в 2009 году после двух лет экспериментирования над созданием серверных веб-компонентов. В ходе своих исследований он пришёл к выводу, что вместо традиционной модели параллелизма на основе потоков следует обратиться к событийно- ориентированным системам. Эта модель была выбрана из-за простоты, низких накладных расходов (по сравнению с идеологией «один поток на каждое соединение») и быстродействия. Целью Node является предложить «простой способ построения масштабируемых сетевых серверов».
  • 40. http://www.slideshare.net/IgorShkulipa 40 Пример. Самый простой сервер var http = require("http"); http.createServer(function (request, response) { response.writeHead(200, { “Content-Type”: “text/plain” }); response.end("Hello, World from NodeJS"); }).listen(12345);
  • 41. http://www.slideshare.net/IgorShkulipa 41 Пример. Сервер немного сложнее var http = require("http"); http.createServer(function (request, response) { response.writeHead(200, { “Content-Type”: “text/html” }); response.write("<!DOCTYPE html><html><head>"); response.write("<title>"+"NodeJS Example"+"</title>"); response.write("</head><body>"); response.write("<h1>"+"Hello, World from NodeJS"+"</h1>"); response.end("</body></html>"); }).listen(12345);
  • 42. http://www.slideshare.net/IgorShkulipa 42 Пример. Сервер еще немного сложнее var http = require("http"); var fs = require("fs"); http.createServer(function (request, response) { var index = fs.readFileSync("./index.html"); response.writeHead(200, { “Content-Type”: “text/html” }); response.end(index); }).listen(12345); Index.html <!DOCTYPE html> <html> <head> <title>NodeJS Example</title> </head> <body> <h1>Hello, World from NodeJS</h1> </body> </html>
  • 43. http://www.slideshare.net/IgorShkulipa 43 Пример. Сервер еще чуть-чуть сложнее var http = require("http"); var url = require("url"); var fs = require("fs"); function Respond(request, response) { var pathname = url.parse(request.url).pathname; var index = fs.readFileSync("./" + pathname); response.writeHead(200, { “Content-Type”: “text/html” }); response.end(index); } http.createServer(Respond).listen(12345); Index.html <!DOCTYPE html> <html> <head> <title>NodeJS Example</title> </head> <body> <h1>Hello, World from NodeJS</h1> </body> </html> Index2.html <!DOCTYPE html> <html> <head> <title>NodeJS Example</title> </head> <body> <h1>Hello, World from NodeJS and Index2</h1> </body> </html>