SlideShare a Scribd company logo
1 of 62
Kdo jsem?
• SW architekt
• .NET vývojář (desktop, web,…)
• frontend vývojář
• security analyst
• …a navždy hater všeho možného…
• https://www.linkedin.com/in/marian-benčat-a832b794
Přednáška nebude
• Výuka Angularu
• https://angular.io/tutorial
• Tisíce videí a psaných tutoriálů na googlu
• Nabídka 3-denního placeného kurzu od základů až po enterprise…
• Výukou NativeScriptu
• https://www.nativescript.org/get-the-nativescript-book
• Politicky korektní, jako vždy 
Motivace
• Přesvědčit více kvalitních vývojářů o tom, že webový vývoj je úplně
někde jinde, než byl…
• že i ten největší hater se z webového vývoje hodně naučil…
O čem tedy bude?
• Stručná historie frontendového vývoje a jeho nešvary
• Proč by měl dát každý webovému vývoji šanci
• Angular, React a jejich vývoj
• Základní pointa komponenty
• Proč už není webový vývoj takový PAIN
• Proč je Angular PLATFORMA a co to přináší
• Využití angularu pro webový, desktopový a nativní mobilní vývoj
Moje cesta k frontendu
• Kdysi dávno desktop vývojář –WPF a WinForms (C#), Swing
(java)…
• Funkční
• Jednoduché a zároveň s pocitem správně odvedené práce
• Komfortní pro vývoj
• V ROZUMNÉM JAZYCE*
*uWPF aWinForms
Moje cesta k frontendu
• Vztah k webovému vývoji nebyl vždy tak docela úplně kladný
*doba JQuery, před rozšířením prvního AngularJS (jinak taky „Angular 1“)
Moje cesta k frontendu
• Neustálá potřeba se vyhnout JS
• Bridge .NET
• Fable
• WebSharper
Rozdíly ve vývoji desktop vs. web
• Především v nějakém komfortu vývoje
• Don‘t repeat yourself
• Keep it simple, stupid
• SILNÝ REUSE KÓDU
• KÓD OBSAHUJÍCÍ NĚJAKOU ARCHITEKTURU (ROZDĚLENÍVRSTEV ATD.)
AngularJS
• Ve své době velký BOOM
• Velká obliba u vývojářů z .NET/Java a celkověOOP světa
• Částečné odstínění od Javascriptu a přímé manipulace s DOMem
• Nástin již nějaké architektury – postupů, SOC
• „komponenty“
• servisy
• … state?
• Stále velmi blízko Javascriptu a nepříjemností s ním spojených
• Přerod z „wow, to funguje ani nevím jak “ na „to vůbec nefunguje, ani
netuším proč“
• Spousty věcí, které běžný webový vývojář nepotřeboval - IOC? Jako proč?
Inversion of control (StackOverflow)
„Inversion of Control, (or IoC), is about getting freedom (You get
married with a woman, you lost freedom and you are being
controlled.“
React.js
• UI knihovna pro web od Facebooku
• Raketový nástup obliby
• Striktní zaměření na komponenty
• Rozpoutal JS fatique
• https://medium.com/@ericclemmons/javascript-fatigue-
48d4011b6fc4
• JSX
Angular 2
• S původním Angularem společná některá syntaxe
• Typescript first citizen – odstínění od většiny Javascriptu
• https://www.typescriptlang.org/
• Microsoft
• Nejpodobnější C# / Javě / Kotlinu (ten se opičí  )
• Nadstavba JS
• Nyní možná i nejpoužívanější jazyk pro React
• Platforma (o tom později)
• Velmi striktní zaměření na oddělení vrstev u komponent
• View (HTML, XML,…)
• Logika komponenty (Typescript, Javascript, DART)
• Styly (CSS, SCSS,…)
Angular a jeho oblíbenost
• Google používá už na několik stovek svých aplikací – včetně
AdSense, AdWords, GMAIL (nějaká část),…
• Velká obliba a rozšíření – mezi top 3 frameworky na trhu (React,
Vue.js, Angular)
Angular a jeho oblíbenost
Angular 2 - 6
Node.js / npm / node_modules
A / R komponenta – co je stejné
• Vstupy
• Výstupy
• Logika komponenty (otevře se dropdown, když se klikne na šipku)
• View
• Ve webovém prostředí HTML
• Binding (jako veWPF), avšak snažíme se nepoužívat přímý double-way binding
• „Code-behind“
• Logika komponenty
• Případný nějaký vnitřní stav komponenty a eventy
A / R komponenta – rozdíly
• Angular
• Velmi striktně rozdělenéView (HTML), Logika (TS) a Styly (CSS)
• Přístup téměř identický jako je v případě desktopových frameworků
• Automatický change detection – na první pohled „MAGIE“
• React
• JSX /TSX
• Syntactic sugar pro míchání html, javascriptu a nově i stylů (nahrazeny javascriptem)
<?php
$k =1;
for($v = 0; $v < $nt; $v++) {
$bgClass= 'blueBg';
if($k > 1 && $k%2 == 0){
$bgClass= 'whiteBg';
}
?>
<tr class="row_tr <?php echo $bgClass;?>">
<td class="row_td td_column_0">&nbsp;</td>
<td class="row_td column_1"><?php echo $rows[$v]['nothing'];?></td>
...
<td class="row_td td_column_0">&nbsp;</td>
</tr>
<?php
$k++;
}
?>
A že nelžu…
https://github.com/mui-org/material-ui/blob/master/packages/material-
ui/src/Button/Button.js
Angular – složení
• UI
• Komponenty
• Direktivy
• Pajpy
• …
• Servisy
• Moduly
• Stav
• V komponentách 
• Observable servisy – něco jako Model v MVVM
• Stavový kontejner
• Flux, Redux, NGRX
Angular – hlavní pointa
• Automatický change detection
• Reaktivní programování – MVVM (i bez double way bindingu)
• Maximální odstínění od javascriptu
• Nenutí ani k OOP, ani funkcionálnímu přístupu
• Jednodušší a lepší WPF pro weby
Angular jako platforma
• Velký framework, avšak téměř VŠE je vyměnitelné
• V základu tedy plní stejnou funkci jako React
• Rozděleno do modulů
• Maximální využití dependency injection a IOC kontejneru
• Možnost cokoliv jednoduše vyměnit a bude to PLATNÉ pro všechny
konzumenty
• Síla „platformy“ – chci vyměnit všem komunikaci po síti?
• Hierarchický dependency injection…
• Jeden příklad za všechny – lokalizace, konfigurace…
CSS - BEM, SMACS, OOCSS, SUIT?
Marian a HTML/CSS
Marian a HTML/CSS
Vývoj nad Angularem
• Grafický návrh a logické celky
• Tlačítka
• Panýlky
• Prvky
• … i dokonce vyloženě UI prvky – Header, Page, GRID…
1) Grafik zpracuje
2) Web designer udělá markup + stylování
3) Frontendista udělá logiku komponenty
4) Pak už se to využívá a skládá
Zkuste dát web designerovi JSX…
Stav aplikace
Redux / Flux / NGRX
• Největší rozšíření mých obzorů
• Stav aplikace je uložený v globálním storu
• Pokud je potřeba sdílet
• Pokud je potřeba ho ovlivňovat z více míst
• Přináší i side-effect výhody
• Time travelling
• Extrémní performance boost z využití immutable struktur
• „Neexistuje proto, aby bylo jednoduché udělat základní věci,
ale aby bylo možné věci těžké, udělat jednoduše.“
Redux / Flux / NGRX
Redux / Flux / NGRX
NativeScript
• Nativní mobilní aplikace ve webových technologiích
• UI je plně nativní, logika běží v JSVM + nativní moduly
• Javascript + XML / Angular /Vue.js
• S webovým / desktopovým projektem možné sdílet obrovské
množství kódu – defakto vše, kromě vizuální části komponent
(HTML)
• Komponenty
• Servisy
• Logika a řízení programu
• Dokonce i komunikace se serverem – máme DI a IOC!
NativeScript
• Stylování pomocí CSS/SCSS
• Věšina css attributů platí
• Sdílení kódu a případné rozdělení pomocí jednoduché naming
konvence – *.tns.*, *.tns.ios.css,…
• Code marschalling
NativeScript – Marschalling
OBJ-C
NSMutableArray *array = [[NSMutableArray alloc] init];
Class buttonClass = [UIButton class];
UIButton *button = [[buttonClass alloc] init];
[array setObject:buttonClass atIndex:0];
[array setObject:button atIndex:1];
Javascript
var array = new NSMutableArray();
var buttonClass = UIButton;
var button = new buttonClass();
array.setObjectAtIndex(buttonClass, 0);
array.setObjectAdIndex(button, 1);
NativeScript – Marschalling
//TestClass.java
public classTestClass {
public long getLongNumber54Bits(){
return 1 << 54;
}
public long getLongNumber53Bits(){
return 1 << 53;
}
}
// js /TS code
var testClass = newTestClass();
var jsNumber = testClass.getLongNumber53Bits();
var specialObject = testClass.getLongNumber54Bits();
http://irisclasson.com/2013/01/14/geolocation-windows-store-
apps-jshtml-and-cxaml-side-by-side/

More Related Content

Similar to Čtvrtkon #71 - Marian Benčat - Angular a NativeScript

Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduJan Kodera
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Tomáš Kukol
 
Moderní Server Side UI Rendering v PHP
Moderní Server Side UI Rendering v PHPModerní Server Side UI Rendering v PHP
Moderní Server Side UI Rendering v PHPMichalMajer2
 
Styling React Native Applications
Styling React Native ApplicationsStyling React Native Applications
Styling React Native ApplicationsJan Maršíček
 
Oxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPressOxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPressAleš Sýkora
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciMartin Krištof
 
Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariRoman Pichlík
 
PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018Brilo Team
 
Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automationOndřej Machulda
 

Similar to Čtvrtkon #71 - Marian Benčat - Angular a NativeScript (20)

TNPW2-2016-03
TNPW2-2016-03TNPW2-2016-03
TNPW2-2016-03
 
TNPW2-2014-03
TNPW2-2014-03TNPW2-2014-03
TNPW2-2014-03
 
Výběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí clouduVýběr vhodných technologii pro startup v prostředí cloudu
Výběr vhodných technologii pro startup v prostředí cloudu
 
Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]Smalltalk prakticky [CZ]
Smalltalk prakticky [CZ]
 
TNPW2-2014-05
TNPW2-2014-05TNPW2-2014-05
TNPW2-2014-05
 
JS2016
JS2016JS2016
JS2016
 
Moderní Server Side UI Rendering v PHP
Moderní Server Side UI Rendering v PHPModerní Server Side UI Rendering v PHP
Moderní Server Side UI Rendering v PHP
 
TNPW2-2012-05
TNPW2-2012-05TNPW2-2012-05
TNPW2-2012-05
 
TNPW2-2013-07
TNPW2-2013-07TNPW2-2013-07
TNPW2-2013-07
 
Styling React Native Applications
Styling React Native ApplicationsStyling React Native Applications
Styling React Native Applications
 
TNPW2-2013-05
TNPW2-2013-05TNPW2-2013-05
TNPW2-2013-05
 
Axure RP training
Axure RP trainingAxure RP training
Axure RP training
 
Oxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPressOxygen Builder - Kyslík pro WordPress
Oxygen Builder - Kyslík pro WordPress
 
Použití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaciPoužití Next.js a Reactí UI khinihovny v aplikaci
Použití Next.js a Reactí UI khinihovny v aplikaci
 
TNPW2-2012-07
TNPW2-2012-07TNPW2-2012-07
TNPW2-2012-07
 
TNPW2-2016-05
TNPW2-2016-05TNPW2-2016-05
TNPW2-2016-05
 
Spring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou TvariSpring framework - J2EE S Lidskou Tvari
Spring framework - J2EE S Lidskou Tvari
 
PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018PoSobota 96 ČB 28.4.2018
PoSobota 96 ČB 28.4.2018
 
TNPW2-2013-02
TNPW2-2013-02TNPW2-2013-02
TNPW2-2013-02
 
Trendy a nové možnosti test automation
Trendy a nové možnosti test automationTrendy a nové možnosti test automation
Trendy a nové možnosti test automation
 

More from Ctvrtkoncz

DEV Čtvrtkon #107 - Štefan Földesi
DEV Čtvrtkon #107 - Štefan FöldesiDEV Čtvrtkon #107 - Štefan Földesi
DEV Čtvrtkon #107 - Štefan FöldesiCtvrtkoncz
 
#85 Čtvrtkon - Obsahové UX - Milan Pichlík
#85 Čtvrtkon - Obsahové UX - Milan Pichlík#85 Čtvrtkon - Obsahové UX - Milan Pichlík
#85 Čtvrtkon - Obsahové UX - Milan PichlíkCtvrtkoncz
 
DEV Čtvrtkon #76 - Open API
DEV Čtvrtkon #76 - Open APIDEV Čtvrtkon #76 - Open API
DEV Čtvrtkon #76 - Open APICtvrtkoncz
 
DEV Čtvrtkon #76 - Makefile
DEV Čtvrtkon #76 - MakefileDEV Čtvrtkon #76 - Makefile
DEV Čtvrtkon #76 - MakefileCtvrtkoncz
 
DEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerceDEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerceCtvrtkoncz
 
DEV Čtvrtkon #76 - Fluent Interface
DEV Čtvrtkon #76 - Fluent InterfaceDEV Čtvrtkon #76 - Fluent Interface
DEV Čtvrtkon #76 - Fluent InterfaceCtvrtkoncz
 
DEV Čtvrtkon #76 - Nachytřená domácnost
DEV Čtvrtkon #76 - Nachytřená domácnostDEV Čtvrtkon #76 - Nachytřená domácnost
DEV Čtvrtkon #76 - Nachytřená domácnostCtvrtkoncz
 
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheelsDEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheelsCtvrtkoncz
 
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešení
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešeníČtvrtkon: Podle jakých kritérií vybrat e-shopové řešení
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešeníCtvrtkoncz
 
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & MicrosevicesČtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & MicrosevicesCtvrtkoncz
 
Čtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal HatákČtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal HatákCtvrtkoncz
 
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...Ctvrtkoncz
 
Pravdy a lži o reklamě na Facebooku - Lukáš Chládek
Pravdy a lži o reklamě na Facebooku - Lukáš ChládekPravdy a lži o reklamě na Facebooku - Lukáš Chládek
Pravdy a lži o reklamě na Facebooku - Lukáš ChládekCtvrtkoncz
 
Vilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycleVilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycleCtvrtkoncz
 
Jan Kaštánek - Od webových aplikací k Androidu
Jan Kaštánek - Od webových aplikací k AndroiduJan Kaštánek - Od webových aplikací k Androidu
Jan Kaštánek - Od webových aplikací k AndroiduCtvrtkoncz
 
Propagace eshopu v praxi - Čtvrtkon
Propagace eshopu v praxi - ČtvrtkonPropagace eshopu v praxi - Čtvrtkon
Propagace eshopu v praxi - ČtvrtkonCtvrtkoncz
 

More from Ctvrtkoncz (16)

DEV Čtvrtkon #107 - Štefan Földesi
DEV Čtvrtkon #107 - Štefan FöldesiDEV Čtvrtkon #107 - Štefan Földesi
DEV Čtvrtkon #107 - Štefan Földesi
 
#85 Čtvrtkon - Obsahové UX - Milan Pichlík
#85 Čtvrtkon - Obsahové UX - Milan Pichlík#85 Čtvrtkon - Obsahové UX - Milan Pichlík
#85 Čtvrtkon - Obsahové UX - Milan Pichlík
 
DEV Čtvrtkon #76 - Open API
DEV Čtvrtkon #76 - Open APIDEV Čtvrtkon #76 - Open API
DEV Čtvrtkon #76 - Open API
 
DEV Čtvrtkon #76 - Makefile
DEV Čtvrtkon #76 - MakefileDEV Čtvrtkon #76 - Makefile
DEV Čtvrtkon #76 - Makefile
 
DEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerceDEV Čtvrtkon #76 - nopCommerce
DEV Čtvrtkon #76 - nopCommerce
 
DEV Čtvrtkon #76 - Fluent Interface
DEV Čtvrtkon #76 - Fluent InterfaceDEV Čtvrtkon #76 - Fluent Interface
DEV Čtvrtkon #76 - Fluent Interface
 
DEV Čtvrtkon #76 - Nachytřená domácnost
DEV Čtvrtkon #76 - Nachytřená domácnostDEV Čtvrtkon #76 - Nachytřená domácnost
DEV Čtvrtkon #76 - Nachytřená domácnost
 
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheelsDEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
DEV Čtvrtkon #76 - How to build an evil-free social network: Behind the wheels
 
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešení
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešeníČtvrtkon: Podle jakých kritérií vybrat e-shopové řešení
Čtvrtkon: Podle jakých kritérií vybrat e-shopové řešení
 
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & MicrosevicesČtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
Čtvrtkon #71 - Jan Kaštánek - Java & Docker & Microsevices
 
Čtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal HatákČtvrtkon #64 - AWS Serverless - Michal Haták
Čtvrtkon #64 - AWS Serverless - Michal Haták
 
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...
Jak nakrmit Facebook firemní stránku a Instagram obsahem, co její fanoušci do...
 
Pravdy a lži o reklamě na Facebooku - Lukáš Chládek
Pravdy a lži o reklamě na Facebooku - Lukáš ChládekPravdy a lži o reklamě na Facebooku - Lukáš Chládek
Pravdy a lži o reklamě na Facebooku - Lukáš Chládek
 
Vilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycleVilibald Wanča - Api design-lifecycle
Vilibald Wanča - Api design-lifecycle
 
Jan Kaštánek - Od webových aplikací k Androidu
Jan Kaštánek - Od webových aplikací k AndroiduJan Kaštánek - Od webových aplikací k Androidu
Jan Kaštánek - Od webových aplikací k Androidu
 
Propagace eshopu v praxi - Čtvrtkon
Propagace eshopu v praxi - ČtvrtkonPropagace eshopu v praxi - Čtvrtkon
Propagace eshopu v praxi - Čtvrtkon
 

Čtvrtkon #71 - Marian Benčat - Angular a NativeScript

  • 1.
  • 2. Kdo jsem? • SW architekt • .NET vývojář (desktop, web,…) • frontend vývojář • security analyst • …a navždy hater všeho možného… • https://www.linkedin.com/in/marian-benčat-a832b794
  • 3. Přednáška nebude • Výuka Angularu • https://angular.io/tutorial • Tisíce videí a psaných tutoriálů na googlu • Nabídka 3-denního placeného kurzu od základů až po enterprise… • Výukou NativeScriptu • https://www.nativescript.org/get-the-nativescript-book • Politicky korektní, jako vždy 
  • 4. Motivace • Přesvědčit více kvalitních vývojářů o tom, že webový vývoj je úplně někde jinde, než byl… • že i ten největší hater se z webového vývoje hodně naučil…
  • 5. O čem tedy bude? • Stručná historie frontendového vývoje a jeho nešvary • Proč by měl dát každý webovému vývoji šanci • Angular, React a jejich vývoj • Základní pointa komponenty • Proč už není webový vývoj takový PAIN • Proč je Angular PLATFORMA a co to přináší • Využití angularu pro webový, desktopový a nativní mobilní vývoj
  • 6. Moje cesta k frontendu • Kdysi dávno desktop vývojář –WPF a WinForms (C#), Swing (java)… • Funkční • Jednoduché a zároveň s pocitem správně odvedené práce • Komfortní pro vývoj • V ROZUMNÉM JAZYCE* *uWPF aWinForms
  • 7. Moje cesta k frontendu • Vztah k webovému vývoji nebyl vždy tak docela úplně kladný *doba JQuery, před rozšířením prvního AngularJS (jinak taky „Angular 1“)
  • 8. Moje cesta k frontendu • Neustálá potřeba se vyhnout JS • Bridge .NET • Fable • WebSharper
  • 9. Rozdíly ve vývoji desktop vs. web • Především v nějakém komfortu vývoje • Don‘t repeat yourself • Keep it simple, stupid • SILNÝ REUSE KÓDU • KÓD OBSAHUJÍCÍ NĚJAKOU ARCHITEKTURU (ROZDĚLENÍVRSTEV ATD.)
  • 10.
  • 11.
  • 12.
  • 13. AngularJS • Ve své době velký BOOM • Velká obliba u vývojářů z .NET/Java a celkověOOP světa • Částečné odstínění od Javascriptu a přímé manipulace s DOMem • Nástin již nějaké architektury – postupů, SOC • „komponenty“ • servisy • … state? • Stále velmi blízko Javascriptu a nepříjemností s ním spojených • Přerod z „wow, to funguje ani nevím jak “ na „to vůbec nefunguje, ani netuším proč“ • Spousty věcí, které běžný webový vývojář nepotřeboval - IOC? Jako proč?
  • 14. Inversion of control (StackOverflow) „Inversion of Control, (or IoC), is about getting freedom (You get married with a woman, you lost freedom and you are being controlled.“
  • 15.
  • 16. React.js • UI knihovna pro web od Facebooku • Raketový nástup obliby • Striktní zaměření na komponenty • Rozpoutal JS fatique • https://medium.com/@ericclemmons/javascript-fatigue- 48d4011b6fc4 • JSX
  • 17. Angular 2 • S původním Angularem společná některá syntaxe • Typescript first citizen – odstínění od většiny Javascriptu • https://www.typescriptlang.org/ • Microsoft • Nejpodobnější C# / Javě / Kotlinu (ten se opičí  ) • Nadstavba JS • Nyní možná i nejpoužívanější jazyk pro React • Platforma (o tom později) • Velmi striktní zaměření na oddělení vrstev u komponent • View (HTML, XML,…) • Logika komponenty (Typescript, Javascript, DART) • Styly (CSS, SCSS,…)
  • 18. Angular a jeho oblíbenost • Google používá už na několik stovek svých aplikací – včetně AdSense, AdWords, GMAIL (nějaká část),… • Velká obliba a rozšíření – mezi top 3 frameworky na trhu (React, Vue.js, Angular)
  • 19. Angular a jeho oblíbenost
  • 20.
  • 21.
  • 22.
  • 24. Node.js / npm / node_modules
  • 25.
  • 26. A / R komponenta – co je stejné • Vstupy • Výstupy • Logika komponenty (otevře se dropdown, když se klikne na šipku) • View • Ve webovém prostředí HTML • Binding (jako veWPF), avšak snažíme se nepoužívat přímý double-way binding • „Code-behind“ • Logika komponenty • Případný nějaký vnitřní stav komponenty a eventy
  • 27. A / R komponenta – rozdíly • Angular • Velmi striktně rozdělenéView (HTML), Logika (TS) a Styly (CSS) • Přístup téměř identický jako je v případě desktopových frameworků • Automatický change detection – na první pohled „MAGIE“ • React • JSX /TSX • Syntactic sugar pro míchání html, javascriptu a nově i stylů (nahrazeny javascriptem)
  • 28.
  • 29. <?php $k =1; for($v = 0; $v < $nt; $v++) { $bgClass= 'blueBg'; if($k > 1 && $k%2 == 0){ $bgClass= 'whiteBg'; } ?> <tr class="row_tr <?php echo $bgClass;?>"> <td class="row_td td_column_0">&nbsp;</td> <td class="row_td column_1"><?php echo $rows[$v]['nothing'];?></td> ... <td class="row_td td_column_0">&nbsp;</td> </tr> <?php $k++; } ?>
  • 31. Angular – složení • UI • Komponenty • Direktivy • Pajpy • … • Servisy • Moduly • Stav • V komponentách  • Observable servisy – něco jako Model v MVVM • Stavový kontejner • Flux, Redux, NGRX
  • 32. Angular – hlavní pointa • Automatický change detection • Reaktivní programování – MVVM (i bez double way bindingu) • Maximální odstínění od javascriptu • Nenutí ani k OOP, ani funkcionálnímu přístupu • Jednodušší a lepší WPF pro weby
  • 33. Angular jako platforma • Velký framework, avšak téměř VŠE je vyměnitelné • V základu tedy plní stejnou funkci jako React • Rozděleno do modulů • Maximální využití dependency injection a IOC kontejneru • Možnost cokoliv jednoduše vyměnit a bude to PLATNÉ pro všechny konzumenty • Síla „platformy“ – chci vyměnit všem komunikaci po síti? • Hierarchický dependency injection… • Jeden příklad za všechny – lokalizace, konfigurace…
  • 34.
  • 35.
  • 36. CSS - BEM, SMACS, OOCSS, SUIT?
  • 39. Vývoj nad Angularem • Grafický návrh a logické celky • Tlačítka • Panýlky • Prvky • … i dokonce vyloženě UI prvky – Header, Page, GRID… 1) Grafik zpracuje 2) Web designer udělá markup + stylování 3) Frontendista udělá logiku komponenty 4) Pak už se to využívá a skládá Zkuste dát web designerovi JSX…
  • 40.
  • 42. Redux / Flux / NGRX • Největší rozšíření mých obzorů • Stav aplikace je uložený v globálním storu • Pokud je potřeba sdílet • Pokud je potřeba ho ovlivňovat z více míst • Přináší i side-effect výhody • Time travelling • Extrémní performance boost z využití immutable struktur • „Neexistuje proto, aby bylo jednoduché udělat základní věci, ale aby bylo možné věci těžké, udělat jednoduše.“
  • 43. Redux / Flux / NGRX
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53. Redux / Flux / NGRX
  • 54.
  • 55.
  • 56. NativeScript • Nativní mobilní aplikace ve webových technologiích • UI je plně nativní, logika běží v JSVM + nativní moduly • Javascript + XML / Angular /Vue.js • S webovým / desktopovým projektem možné sdílet obrovské množství kódu – defakto vše, kromě vizuální části komponent (HTML) • Komponenty • Servisy • Logika a řízení programu • Dokonce i komunikace se serverem – máme DI a IOC!
  • 57. NativeScript • Stylování pomocí CSS/SCSS • Věšina css attributů platí • Sdílení kódu a případné rozdělení pomocí jednoduché naming konvence – *.tns.*, *.tns.ios.css,… • Code marschalling
  • 58. NativeScript – Marschalling OBJ-C NSMutableArray *array = [[NSMutableArray alloc] init]; Class buttonClass = [UIButton class]; UIButton *button = [[buttonClass alloc] init]; [array setObject:buttonClass atIndex:0]; [array setObject:button atIndex:1]; Javascript var array = new NSMutableArray(); var buttonClass = UIButton; var button = new buttonClass(); array.setObjectAtIndex(buttonClass, 0); array.setObjectAdIndex(button, 1);
  • 59. NativeScript – Marschalling //TestClass.java public classTestClass { public long getLongNumber54Bits(){ return 1 << 54; } public long getLongNumber53Bits(){ return 1 << 53; } } // js /TS code var testClass = newTestClass(); var jsNumber = testClass.getLongNumber53Bits(); var specialObject = testClass.getLongNumber54Bits();
  • 60.
  • 61.