SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Downloaden Sie, um offline zu lesen
AngularJS
Иван Громов про Angular



summer.is.gone@gmail.com

https://github.com/summerisgone
Глоссарий
• AngularJS - фреймворк, про который доклад
• MVC - паттерн проектирования (интерфейсов),
разделение модель - представление - контроллер
• Dependency Injection - паттерн проектирования,
когда один класс не знает ничего о другом, но
пользуется его экземпляром
• Директива - понятие AngularJS, спецразметка,
определяющая (изменяющая) поведение компонента
2
Начнем с примера
HTML
4
Строчек на JS - 0 (!)
JavaScript
5
и чё?
Предварительные итоги
• MVC - модель - scope, вью - html, контроллер -
обычная* функция
• Магический биндинг: «dirty-check», старый добрый
объект
• Слабое связывание: шаблоны - модели -
контроллеры - зависимости
• Тестируемость и модульность (Karma)

«Мы сделали в Angular так много вещей, которые упрощают
тестирование, что не оставили вам повода этого избегать»
7
Мой подход
Архитектура
Дано%
• Наверху Router, SPA
• Большая вложенность директив с
различными требованиями
• Один большой DTO на входе и
выходе
Решение%
• Иерархия директив
• изоляция сверху вниз
• внизу изоляцией пренебрегаю, т.к.
много деталей и поведений
9
Router
+

Controller
Art DTO + API
Spread tabs
Stripes
Blocks
iftext image
Вложенный DTO

вложенные директивы

вложенные scope
• Изоляция scope - удобно разделять логику
• Через require ушёл от 

.getChildren()[0].getChildren()[3]
10
Отдельный плагин -
отдельная директива
• Я люблю jqueryUI
• Директива - прокси + директива логика
• прокси генерирует события на scope:

size + resizable, position + draggable
11
controller

запись в scope

изменение DOM напрямую
Dependency injection

публичные методы для дочерних
12
link

подписка на изменения scope

подписка на DOM напрямую
родительский API
Недостатки
Тестируемость
• Из-за сильной вертикальной связанности мне
приходится использовать fixtures с полным DTO
для тестов
• Сложно взять что-то «рядом» с деревом DTO,
например, нет доступа к текущему табу
• На «нижних» компонентах связано слишком
много директив:

<div class="block-inner" size resizable position
position-helper draggable selectable />
14
Спасибо за внимание
Вопросы?

Weitere ähnliche Inhalte

Was ist angesagt?

Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)Fedor Malyshkin
 
AngularJS2 vs VueJS2 (ru)
AngularJS2 vs VueJS2 (ru)AngularJS2 vs VueJS2 (ru)
AngularJS2 vs VueJS2 (ru)chaykaborya
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidDataArt
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейKonstantin Komelin
 
Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)DrupalYug
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersГлеб Тарасов
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныCodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?Kseniya Redunova
 
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир ДупелевRich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир ДупелевOntico
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSГлеб Тарасов
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
JavaScript design patterns overview
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview Kseniya Redunova
 
Mobile Automation based on Appium
Mobile Automation based on AppiumMobile Automation based on Appium
Mobile Automation based on AppiumAnton Sirota
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.jsОмские ИТ-субботники
 
Rambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRAMBLER&Co
 
Rambler.iOS #5: TDD и VIPER
Rambler.iOS #5: TDD и VIPERRambler.iOS #5: TDD и VIPER
Rambler.iOS #5: TDD и VIPERRAMBLER&Co
 

Was ist angesagt? (20)

Средства разработки web приложений (Web frameworks)
Средства разработки web приложений
(Web frameworks)Средства разработки web приложений
(Web frameworks)
Средства разработки web приложений (Web frameworks)
 
AngularJS2 vs VueJS2 (ru)
AngularJS2 vs VueJS2 (ru)AngularJS2 vs VueJS2 (ru)
AngularJS2 vs VueJS2 (ru)
 
Антон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в androidАнтон Валюх - Использование паттерна Mvvm в android
Антон Валюх - Использование паттерна Mvvm в android
 
knockout.js
knockout.jsknockout.js
knockout.js
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
 
ASP.NET MVC: new era?
ASP.NET MVC: new era?ASP.NET MVC: new era?
ASP.NET MVC: new era?
 
Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
Инструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важныИнструменты разные нужны, инструменты разные важны
Инструменты разные нужны, инструменты разные важны
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?MarionetteJS. Shall we dance?
MarionetteJS. Shall we dance?
 
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир ДупелевRich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
Rich-client, или Как я перестал боятся и полюбил велосипеды / Владимир Дупелев
 
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOSКурсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
Курсы по мобильной разработке. 2 лекция. Построение интерфейсов в iOS
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
JavaScript design patterns overview
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview
 
Mobile Automation based on Appium
Mobile Automation based on AppiumMobile Automation based on Appium
Mobile Automation based on Appium
 
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
2014-08-02 03 Дмитрий Шматко. Первые впечатления от Node.js
 
Rambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOSRambler.iOS #3: Dependency Injection в iOS
Rambler.iOS #3: Dependency Injection в iOS
 
Rambler.iOS #5: TDD и VIPER
Rambler.iOS #5: TDD и VIPERRambler.iOS #5: TDD и VIPER
Rambler.iOS #5: TDD и VIPER
 

Ähnlich wie презентация вводного доклада Angular на fronttalks.ru

«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)Mail.ru Group
 
Проблемы точечной застройки в больших городах или зачем нужен Dagger
Проблемы точечной застройки в больших городах или зачем нужен DaggerПроблемы точечной застройки в больших городах или зачем нужен Dagger
Проблемы точечной застройки в больших городах или зачем нужен DaggerValeriya Atamanova
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCGetDev.NET
 
Сложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворковСложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворковz-tech
 
The MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVCThe MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVCBulat Khabirov
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.Igor Shkulipa
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Anton Vidishchev
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектированияITCP Community
 
VIPER architecture
VIPER architectureVIPER architecture
VIPER architectureAlex Rudyak
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.Igor Shkulipa
 
Быстрее света. UA Mobile 2016.
Быстрее света. UA Mobile 2016.Быстрее света. UA Mobile 2016.
Быстрее света. UA Mobile 2016.UA Mobile
 
Presentation_ppt
Presentation_pptPresentation_ppt
Presentation_pptVasayXTX
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and AngularSQALab
 
Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»SpbDotNet Community
 

Ähnlich wie презентация вводного доклада Angular на fronttalks.ru (20)

«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
«Компонентная верстка с AngularJS», Андрей Яманов (CTO TeamHunt)
 
AngularJS
AngularJSAngularJS
AngularJS
 
Angular js
Angular jsAngular js
Angular js
 
Angular2
Angular2Angular2
Angular2
 
Backbone lesson 1
Backbone lesson 1Backbone lesson 1
Backbone lesson 1
 
Проблемы точечной застройки в больших городах или зачем нужен Dagger
Проблемы точечной застройки в больших городах или зачем нужен DaggerПроблемы точечной застройки в больших городах или зачем нужен Dagger
Проблемы точечной застройки в больших городах или зачем нужен Dagger
 
ASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVCASP.NET, MVC, ASP.NET MVC
ASP.NET, MVC, ASP.NET MVC
 
Сложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворковСложные социальные приложения с помощью JS MVC фреймворков
Сложные социальные приложения с помощью JS MVC фреймворков
 
The MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVCThe MVC Renaissance | Возрождение MVC
The MVC Renaissance | Возрождение MVC
 
C# Web. Занятие 09.
C# Web. Занятие 09.C# Web. Занятие 09.
C# Web. Занятие 09.
 
Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3Test Driven Development in ASP.NET MVC 3
Test Driven Development in ASP.NET MVC 3
 
Паттерны проектирования
Паттерны проектированияПаттерны проектирования
Паттерны проектирования
 
VIPER architecture
VIPER architectureVIPER architecture
VIPER architecture
 
C# Web. Занятие 16.
C# Web. Занятие 16.C# Web. Занятие 16.
C# Web. Занятие 16.
 
Быстрее света. UA Mobile 2016.
Быстрее света. UA Mobile 2016.Быстрее света. UA Mobile 2016.
Быстрее света. UA Mobile 2016.
 
Presentation_ppt
Presentation_pptPresentation_ppt
Presentation_ppt
 
Protrarctor and Angular
Protrarctor and AngularProtrarctor and Angular
Protrarctor and Angular
 
Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»
 
Django
DjangoDjango
Django
 
django.pdf
django.pdfdjango.pdf
django.pdf
 

презентация вводного доклада Angular на fronttalks.ru

  • 1. AngularJS Иван Громов про Angular
 
 summer.is.gone@gmail.com
 https://github.com/summerisgone
  • 2. Глоссарий • AngularJS - фреймворк, про который доклад • MVC - паттерн проектирования (интерфейсов), разделение модель - представление - контроллер • Dependency Injection - паттерн проектирования, когда один класс не знает ничего о другом, но пользуется его экземпляром • Директива - понятие AngularJS, спецразметка, определяющая (изменяющая) поведение компонента 2
  • 7. Предварительные итоги • MVC - модель - scope, вью - html, контроллер - обычная* функция • Магический биндинг: «dirty-check», старый добрый объект • Слабое связывание: шаблоны - модели - контроллеры - зависимости • Тестируемость и модульность (Karma)
 «Мы сделали в Angular так много вещей, которые упрощают тестирование, что не оставили вам повода этого избегать» 7
  • 9. Архитектура Дано% • Наверху Router, SPA • Большая вложенность директив с различными требованиями • Один большой DTO на входе и выходе Решение% • Иерархия директив • изоляция сверху вниз • внизу изоляцией пренебрегаю, т.к. много деталей и поведений 9 Router +
 Controller Art DTO + API Spread tabs Stripes Blocks iftext image
  • 10. Вложенный DTO
 вложенные директивы
 вложенные scope • Изоляция scope - удобно разделять логику • Через require ушёл от 
 .getChildren()[0].getChildren()[3] 10
  • 11. Отдельный плагин - отдельная директива • Я люблю jqueryUI • Директива - прокси + директива логика • прокси генерирует события на scope:
 size + resizable, position + draggable 11
  • 12. controller
 запись в scope
 изменение DOM напрямую Dependency injection
 публичные методы для дочерних 12 link
 подписка на изменения scope
 подписка на DOM напрямую родительский API
  • 14. Тестируемость • Из-за сильной вертикальной связанности мне приходится использовать fixtures с полным DTO для тестов • Сложно взять что-то «рядом» с деревом DTO, например, нет доступа к текущему табу • На «нижних» компонентах связано слишком много директив:
 <div class="block-inner" size resizable position position-helper draggable selectable /> 14