SlideShare ist ein Scribd-Unternehmen logo
1 von 122
Downloaden Sie, um offline zu lesen
Welche Webtechnologie passt zu mir?
Alexander Casall
@sialcasa
Software Architekt &
Scrum Product Owner
Webentwicklung
DAS richtige
Webframework
Webframeworks
https://github.com/mraible/history-of-web-frameworks-timeline
Server-seitiges Rendering
vs
Client-seitiges Rendering aka
Single Page Applications (SPA)
Rendering
Rendering
Server
Client
Server side
rendering
Client side
rendering
GET http://catcontent.com
Rendering
Server
Client
GET
<html>
…
</html>
GET
<html>
…
</html>
GET
<html>
…
</html>
Server Side Rendering
Rendering
Rendering
Server
Client
Server side
rendering
Client side
rendering
GET http://catcontent.com
Rendering
Server
Client
GET
<html>
<script>
</script>
</html>
GET
{
"cat": {
"name":"grumpy“
}
}
GET
{
"cat": {
"name":"garfield“
}
}
Client Side Rendering
Vorteile
• Caching der
gerenderten Templates
• Dokumenten-Ansatz
• Hohe User Experience
• Ein Programmiermodell
im Client (klare
Trennung der Aspekte)
Rendering
Server
Client
Rendering
Server
Client
Nachteile
• Seiten müssen erneut
übertragen werden
• Serverseitige Sessions
notwendig (stateful)
• Initialer Ladeaufwand
• SEO kritischer
• Zusätzliche API
Schicht (e.g. REST)
• Unvorhersehbare
Performance
Rendering
Server
Client
Rendering
Server
Client
Single Page Applications
https://github.com/mraible/history-of-web-frameworks-timeline
SPAs
Angular 2 vs. React
als Rich Client Platform zu verstehen
in TypeScript geschriebenes SPA Framework
verfolgt Komponentenansatz
Angular
Typescript
Optional statisch getypt
interfaces, enums, generics, access modifiers …
interface ICar{
engine: string;
color: string;
}
class Car implements ICar {
constructor (public engine: string, public color: string) {}
private drive(direction:Direction) : boolean{
return false; //unfall
}
}
Transpiliert zu JavaScript
Komponenten
Komponentenansatz
header component
category component
discount component
content component
suggestionsoverview component
suggestion component
webshop component
highlight component
@Component({
selector: 'category',
templateUrl: 'category.component.html',
styleUrls: ['category.component.css'],
})
export class CategoryComponent {
title = 'categorycomponent works!';
}
Struktur einer Komponente
@Component({
selector: 'categories',
template: '<h1>

{{title}}

</h1>',
styleUrls: ['category.component.css'],
})
export class CategoryComponent {
title = 'categorycomponent works!';
}
Template
Styles
TypeScript
Struktur einer Komponente
Ein genauerer Blick auf Templates
@Component({
selector: 'categories',
template: `<ul>
<li *ngFor="let category of categories">
{{category.name}}
</li>

</ul>`,
styleUrls: ['category.component.css'],
})
export class CategoryComponent {
var categories: Categories[] = [
{ "id": 1, "name": "jackets" },
{ "id": 2, "name": "trousers" },
{ "id": 3, "name": "planes" }
];
}
Structural Directive
<— Binding
@Component({
selector: 'categories',
template: '<button [style.color] = "cool ? 'red': 'green'"
(click)="toggleCoolness()">Coolness</button>'
})
export class CategoryComponent {
cool = false;
switchCoolness(){
this.cool = !this.cool;
}
}
Style Bindings
Unidirektionales Binding
@Component({
selector: 'categories',
template: `<h1>

{{title}}

</h1>`,
styleUrls: ['category.component.css'],
})
export class CategoryComponent {
title = 'Display this!';
}
Bidirektionales Binding & Events
@Component({
selector: 'categories',
template: '<input [(ngModel)]="input"
(click)="addPlus()">'
styleUrls: ['category.component.css'],
})
export class CategoryComponent {
input = 'initial Value';
addPlus(){
title += '+';
}
}
https://angular.io/docs/ts/latest/guide/template-syntax.html#!#binding-syntax
Verschachtelung
@Component({
selector: 'webshop',
template: `
<header/>
<categories/>
<discounts/>
<content/>
<suggestions/>
`
})
export class WebshopComponent {
}
Verschachtelung derKomponenten
nsatz
header component
category component
webshop component
@Component({
selector: 'webshop',
template: `
<header/>
<categories/>
<discounts/>
<content/>
<suggestions/>
`
})
export class WebshopComponent {
}
@Component({
selector: 'categories',
templateUrl: 'category.componen
})
export class CategoryComponent {
}
nsatz
header component
category component
webshop component
Kommunikation zwischen Parent / Child?
@Component({
selector: 'parent',
template: '<child [text]="displayInChild"></child>'
})
export class ParentComponent {
displayInChild = 'Text of Parent!'
}
Daten von Parent zu Child über Binding
@Component({
selector: 'child',
template: '<label>{{text}}</label>'‚
})
export class ChildComponent {
@Input() text : String
}
@Component({
selector: 'parent',
template: '<child (close)="onEvent($event)">
</child>'
})
export class ParentComponent {
onEvent(input: String) {…}
}
Daten von Child zu Parent über Events
@Component({
selector: 'child',
template: '<label (click)="close.emit('closeme')">Text</label>'‚
})
export class ChildComponent {
@Output() close : EventEmitter<String>
}
Weitere Kommunikationsarten zwischen
Parent / Child möglich
https://angular.io/docs/ts/latest/cookbook/component-communication.html
Services für Datenzugriffe
Services
@Injectable()
export class CategoryService {
getCategories() : Category[]{
…
}
}
Component
Service
Dependency Injection
Category
Service
CompA
@Component({
…,
providers:[CategoryService]
})
export class CompA {}
CompB CompC
@Component({…})
export class CompB {
//Constructor Injection
constructor (private _service:
CategoryService){}
doSomeThing(){
this._service.getCategories();
}
}
CompC sieht genau so aus, und bekommt
die gleiche Instanz des Services
Category
Service
CompA
CompB CompC
@Component({
providers:[CategoryService], …
})
export class CompB {
//Constructor Injection
constructor (private _service:
CategoryService){}
doSomeThing(){
this._service.getCategories();
}
}
CompC sieht genau so aus, und bekommt
die eine eigene Instanz des Services
Category
Service
React
• SPA Library
• verfolgt Komponenten Ansatz
• beschränkt sich im Kern auf Strukturierung und
Rendering von Komponenten
React
Struktur einer Komponente
class HelloWorldItem extends React.Component{
constructor(props){
super(props);
this.state.counter = 1;
}
render(){
return React.createElement('div', {},
React.createElement('label', ...),
);
}
}
Struktur einer Komponente
class HelloWorldItem extends React.Component{
constructor(props){
super(props);
this.state.counter = 1;
}
render(){
return (
<div>
<label>{this.props.title}</label>
</div>
)
}
}
JSX
class HelloWorldItem extends React.Component{
constructor(props){
super(props);
this.state.counter = 1;
}
render(){
return (
<div>
<label>{this.props.title}</label>
</div>
)
}
}
Struktur einer Komponente
Input von parent
Interner Zustand
Render wird aufgerufen, wenn props
oder state neu gesetzt wird
Ein genauerer Blick auf JSX
class HelloWorldList extends React.Component{
constructor(props){
super(props);
}
render(){
return (
<div>
<ul>
{this.props.items.map((i,index) =>
<li key={index}>{i}</li>
)}
</ul>
</div>
)
}
}}
JavaScript statt Template Syntax
class MyComponent extends React.Component {
constructor(props) {
super(props);
this.onInputChanged = onInputChanged.bind(this);
}
onInputChanged(event) {
this.setState({input: event.target.value});
}
render() {
return (
<div>
<input type="text" value={this.state.input}
onChange={this.onInputChanged}/>
</div>
);
}
}
Eventhandling
class MyComponent extends React.Component {
render() {
var header = <h1>MyHeader</h1>;
var footer = <p>Footer 2016</p>;
var greeting;
if(this.props.loggedIn) {
greeting = <p>Hallo {this.props.name}</p>;
} else {
greeting = <p>Hallo Gast</p>;
}
return (
<div>
{header}
{greeting}
{footer}
</div>
);
}
}
JSX in erweiterter Ausprägung
Render wird aufgerufen, wenn props
oder state neu gesetzt wird
Verschachtelung
Verschachtelung derKomponenten
class Webshop extends React.Component{
constructor(props){
super(props);
}
render() {
return (
<div>
<Header/>
<Categories/>
<Discounts/>
<Content/>
<Suggestions/>
</div>
);
}
}
class Webshop extends React.Component{
constructor(props){
super(props);
}
render() {
return (
<div>
<Header/>
<Categories/>
<Discounts/>
<Content/>
<Suggestions/>
</div>
);
}
}
class Categories extends React.Component
Kommunikation zwischen Parent / Child?
class Parent extends React.Component{
…
render() {
return (
<div>
<Child items={this.state.items}/>
</div>
);
}}
class Child extends React.Component{
render() {
return ({
this.props.items.map((i,index) =>
<div>{i}</div>
)
});
}}
Daten von Parent zu Child über Props
class Parent extends React.Component{
…
render() {
return (
<div>
<Child someAction={this.callBack.bind(this)}/>
</div>
);}
callBack(){//Do something}
}
class Child extends React.Component{
render() {
return (
<div>
<input type="button"
onClick={this.props.someAction}/>
</div>
);
Callback Funktionen von Child zu Parent
Wie sieht die Architektur
abseits der Komponenten aus?
(äquivalent Services, DI)
Redux
Component
Actions
Reducer
Reducer
Reducer
State
Middleware
(state, action) => state
Bekannte Konzepte
Teilweise uneindeutiger Datenfluss
Neue Konzepte
Eindeutiger Datenfluss
ABER
Es existiert ein Redux Binding
für Angular 2
Kurzes Resümee
Was React (nicht) ist
• Reacts Hauptanspruch ist die Strukturierung der
Anwendung
• React ist eine sehr gute Rendering-Bibliothek
• React ist keine Rich Client Platform
• React ist keine Komponenten Bibliothek
Was Angular (nicht) ist
• Angulars Hauptanspruch ist die Strukturierung der
Anwendung
• Angular ist eine Rich Client Platform
• Angular ist keine Komponenten Bibliothek
Welche Unterschiede existieren?
• React setzt auf JSX
• Angular setzt auf Templates (Lernaufwand)
• Angular bietet Uni - und Bidirektionales Binding
• React nutzt render() wenn State / Props neu gesetzt wird
• React eher funktional, Angular eher OOP
Anwendungen gehen über den
Komponentenansatz hinaus
Anwendungsentwicklung
Lifecycle Hooks für Komponenten
Backend-Anbindung
Dependency Injection
Access-Management
Formular-Handling & (Async)-Validation
Accessibility
Security
Controls
Routing
i18n
Mobile
Komplexes Focus Management
UI Tests
Lifecycle Hooks für Komponenten
Backend-Anbindung
Dependency Injection
Access-Management
Formular-Handling & (Async)-Validation
Accessibility
Kernfunktion
Drittanbieter
Nicht vorhanden
Security
Controls
Routing
i18n
Mobile
Komplexes Focus Management
UI Tests
Kernfunktion
Drittanbieter
Nicht vorhanden
Beispiel Routing
Routing
Routing
Routing @ Angular
const contentRoutes:	RouterConfig =	[
{
path:	‘highlight',
component:	HighlightComponent
},
{
path:	’catalogue',
component:	CatalogueComponent,
]}
];
export const appRouterProviders =	[
provideRouter(routes)
];
Routing deklarieren
@Component({
selector: 'content',
template: `
<a routerLink="/highlight">Highlights</a>

<a routerLink="/catalogue">Katalog</a>
<router-outlet></router-outlet>
`
})
export class ContentComponent {}
Routing
Routing @ React
via 3rd Party lib
https://github.com/ReactTraining/react-router
Routing deklarieren
render((
<Router history={browserHistory}>
<Route path="/" component={App}>
<Route path="about" component={About}/>
<Route path="users" component={Users}>
<Route path="/user/:userId" component={User}/>
</Route>
<Route path="*" component={NoMatch}/>
</Route>
</Router>
), document.getElementById('root'))
Routing nutzen
const Users = React.createClass({
render() {
return (
<div>
<Link to={`/user/${user.id}`}>{user.name}</Link>
</div>
)
}
})
==
Routing Routing
Kurzes Resümee
React (Stack) Angular 2
Ok, genug Funktionen - was ist
mit Zukunftssicherheit?
Zukunftssicherheit
• Welche Aspekte sind wichtig?
• Stand im Produktlebenszyklus
• Strategie desVendors
• Marktsituation
Produktlebenszyklus
Einführung
Reife
Wachstum Degeneration
Hinweis
Man sollte bedenken, dass jede Third-Party Library wieder
auf Ihr Zukunftssicherheit zu prüfen ist.
Wie setzt derVendor die
Bibliotheken ein
Wie setzt Google ein?
• Google Adwords (in Entwicklung)
• GreenTea (Googles internes CRM)
• Google Fiber (https://fiber.google.com/about/)
Wie setzt Facebook ein?
• in Facebook (z.B. Chat, Kommentare)
• WhatsApp Webapp
• Instagram
Release Politik /
Versionierung
Release Strategie Angular
SemVer
http://angularjs.blogspot.de/2016/10/versioning-and-releasing-angular.html?m=1&utm_campaign=NG-Newsletter&utm_medium=email&utm_source=NG-Newsletter_169
angularjs.blogspot.de/2016/10/versioning-and-releasing-angular.html?m=1&utm_campaign=NG-
Newsletter&utm_medium=email&utm_source=NG-Newsletter_169
Versioning React
https://facebook.github.io/react/blog/2016/02/19/new-versioning-scheme.html
SemVer seit 0.14.7. —> 15.0.0
ohne expliziten Releasezyklus
Marktsituation
Freelancer auf Gulp
0
125
250
375
500
Freelancer auf GULP
442
2030
react angular2 angular
Projekte auf Gulp
0
12,5
25
37,5
50
Projekte auf Gulp
47
33
react angular2 angular
Community auf Stackoverflow
0
2250
4500
6750
9000
Stackoverflow created:1m
8.476
6.736
3.999
react angular2 angular
Kurzes Resümee
Resümee Marktsituation
• Beide Technologien ermöglichen die Entwicklung
komplexer Anwendungen
• React ist eine Bibliothek
• Angular 2 ist ein Framework (RCP)
Resümee Marktsituation
• Versioning gleich
• Angular hat transparente Releasezyklen
• Marktsituation rund um Angular etwas besser
Welche Entscheidung haben
wir getroffen?
Wie sind wir bei unserer Entscheidung vorgegangen?
Beide Technologien sind
relevant und wir sollten uns
mit ihnen auskennen.
Wenn Greenfield Projekt, dann
Angular
MERKE
Wer Webanwendungen baut muss
lernen permanent zu lernen.
Danke
twitter.com/sialcasa
Umsetzung von Software, Beratung und Training
https://www.similartech.com/compare/angular-js-vs-react-js
Why Do People Hate Client-Side JavaScript?
Everyone is different, and if you asked 100 different haters I’m
sure they would have 100 different flavors of Hatorade™.
https://webmasters.googleblog.com/2014/05/understanding-
web-pages-better.html
export default class Counter extends Component {
constructor(props) {
super(props);
}
render() {
const { counter, increment, decrement, addTreatments } = this.props;
return (
<View style={{flex: 1, alignItems: 'center', justifyContent: 'center' }}>
<Text>{counter}</Text>
<TouchableOpacity onPress={decrement} style={styles.button}>
<Text>down</Text>
</TouchableOpacity>
<TouchableOpacity onPress={addTreatments} style={styles.button}>
<Text>Load</Text>
</TouchableOpacity>
</View>
);
}
}
React Native
@Component({
selector: 'list-test',
template: `
<GridLayout rows="*">
<ListView [items]="items">
<template let-item="item">
<item-component [data]="item"></item-component>
</template>
</ListView>
</GridLayout>
`
})
export class ListTest {
items : Array<String>
constructor(private restClient : RestClient) {
restClient.loadTreatments().subscribe(resp =>
console.log(resp))
//this.items =
}
}
Nativescript

Weitere ähnliche Inhalte

Was ist angesagt?

Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Springdenschu
 
Celery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für DjangoCelery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für DjangoMarkus Zapke-Gründemann
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit antroskakori
 
dotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Servicesdotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile ServicesSascha Dittmann
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Joachim Baumann
 
IPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 ReloadedIPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 ReloadedRalf Eggert
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJSSebastian Springer
 
Celery eine asynchrone task queue (nicht nur) für django
Celery   eine asynchrone task queue (nicht nur) für djangoCelery   eine asynchrone task queue (nicht nur) für django
Celery eine asynchrone task queue (nicht nur) für djangoMarkus Zapke-Gründemann
 
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...Stephan Hochdörfer
 
Malte Wessel - Google web toolkit
Malte Wessel - Google web toolkitMalte Wessel - Google web toolkit
Malte Wessel - Google web toolkitdrbreak
 

Was ist angesagt? (14)

Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Spring
 
Celery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für DjangoCelery - eine asynchrone Task Queue (nicht nur) für Django
Celery - eine asynchrone Task Queue (nicht nur) für Django
 
Mvc public
Mvc publicMvc public
Mvc public
 
Feature Flags mit Togglz
Feature Flags mit TogglzFeature Flags mit Togglz
Feature Flags mit Togglz
 
Python builds mit ant
Python builds mit antPython builds mit ant
Python builds mit ant
 
dotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Servicesdotnet Cologne 2013 - Windows Azure Mobile Services
dotnet Cologne 2013 - Windows Azure Mobile Services
 
Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)Gradle - Beginner's Workshop (german)
Gradle - Beginner's Workshop (german)
 
IPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 ReloadedIPC 2015 Zend Framework 3 Reloaded
IPC 2015 Zend Framework 3 Reloaded
 
Große Applikationen mit AngularJS
Große Applikationen mit AngularJSGroße Applikationen mit AngularJS
Große Applikationen mit AngularJS
 
Celery eine asynchrone task queue (nicht nur) für django
Celery   eine asynchrone task queue (nicht nur) für djangoCelery   eine asynchrone task queue (nicht nur) für django
Celery eine asynchrone task queue (nicht nur) für django
 
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...
Offline. Na und? Strategien für offlinefähige Applikationen in HTML5 - Herbst...
 
JSF vs. GWT? JSF und GWT!
JSF vs. GWT? JSF und GWT!JSF vs. GWT? JSF und GWT!
JSF vs. GWT? JSF und GWT!
 
Malte Wessel - Google web toolkit
Malte Wessel - Google web toolkitMalte Wessel - Google web toolkit
Malte Wessel - Google web toolkit
 
Wicket Kurzübersicht
Wicket KurzübersichtWicket Kurzübersicht
Wicket Kurzübersicht
 

Andere mochten auch

JavaFX in Action (devoxx'16)
JavaFX in Action (devoxx'16)JavaFX in Action (devoxx'16)
JavaFX in Action (devoxx'16)Alexander Casall
 
JavaFX – 10 things I love about you
JavaFX – 10 things I love about youJavaFX – 10 things I love about you
JavaFX – 10 things I love about youAlexander Casall
 
Going Desktop with Electron
Going Desktop with ElectronGoing Desktop with Electron
Going Desktop with ElectronLeo Lindhorst
 
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...SlideShare
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksSlideShare
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShareSlideShare
 

Andere mochten auch (8)

JavaFX Pitfalls
JavaFX PitfallsJavaFX Pitfalls
JavaFX Pitfalls
 
JavaFX in Action (devoxx'16)
JavaFX in Action (devoxx'16)JavaFX in Action (devoxx'16)
JavaFX in Action (devoxx'16)
 
The JavaFX Ecosystem
The JavaFX EcosystemThe JavaFX Ecosystem
The JavaFX Ecosystem
 
JavaFX – 10 things I love about you
JavaFX – 10 things I love about youJavaFX – 10 things I love about you
JavaFX – 10 things I love about you
 
Going Desktop with Electron
Going Desktop with ElectronGoing Desktop with Electron
Going Desktop with Electron
 
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
A Guide to SlideShare Analytics - Excerpts from Hubspot's Step by Step Guide ...
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 
Getting Started With SlideShare
Getting Started With SlideShareGetting Started With SlideShare
Getting Started With SlideShare
 

Ähnlich wie Welches Webframework passt zu mir? (WJAX)

JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)Michael Kurz
 
JavaServer Faces - Ein schneller Schnelleinstieg
JavaServer Faces - Ein schneller SchnelleinstiegJavaServer Faces - Ein schneller Schnelleinstieg
JavaServer Faces - Ein schneller Schnelleinstiegtimbrueckner
 
jQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/FluidjQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/FluidPeter Schuhmann
 
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific LanguagesAgiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific LanguagesDominik Hirt
 
Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8gedoplan
 
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian Blum
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian BlumPHP-SEO Vortrag SEOCampixx 2013 von Sebastian Blum
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian BlumSebastian Blum
 
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...kaftanenko
 
PrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFPrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFChristian Kaltepoth
 
Frontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 BestellsystemeFrontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 BestellsystemeNico Steiner
 
Wieviel client braucht das web
Wieviel client braucht das webWieviel client braucht das web
Wieviel client braucht das webgedoplan
 
.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1Manfred Steyer
 
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015Manfred Steyer
 
Shortcodes erstellen mit WordPress
Shortcodes erstellen mit WordPressShortcodes erstellen mit WordPress
Shortcodes erstellen mit WordPressTorsten Landsiedel
 
Christian heilmann html 5 - das web und der browser als platform
Christian heilmann   html 5 - das web und der browser als platformChristian heilmann   html 5 - das web und der browser als platform
Christian heilmann html 5 - das web und der browser als platformChristian Heilmann
 
PHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzePHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzeRalf Lütke
 
Legacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpenLegacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpenPhilipp Burgmer
 
Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadingedoplan
 

Ähnlich wie Welches Webframework passt zu mir? (WJAX) (20)

JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)JSF 2 Kompositkomponenten (JAX 2012)
JSF 2 Kompositkomponenten (JAX 2012)
 
JavaServer Faces - Ein schneller Schnelleinstieg
JavaServer Faces - Ein schneller SchnelleinstiegJavaServer Faces - Ein schneller Schnelleinstieg
JavaServer Faces - Ein schneller Schnelleinstieg
 
jQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/FluidjQueryMobile mit Extbase/Fluid
jQueryMobile mit Extbase/Fluid
 
react-de.pdf
react-de.pdfreact-de.pdf
react-de.pdf
 
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific LanguagesAgiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific Languages
 
Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8Java-Webanwendungen mit Vaadin 8
Java-Webanwendungen mit Vaadin 8
 
Ruby on Rails SS09 06
Ruby on Rails SS09 06Ruby on Rails SS09 06
Ruby on Rails SS09 06
 
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian Blum
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian BlumPHP-SEO Vortrag SEOCampixx 2013 von Sebastian Blum
PHP-SEO Vortrag SEOCampixx 2013 von Sebastian Blum
 
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
Einführung in die Java-Webentwicklung - Part II - [3 of 3] - Java Server Face...
 
PrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFPrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSF
 
Frontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 BestellsystemeFrontend-Architektur der 1&1 Bestellsysteme
Frontend-Architektur der 1&1 Bestellsysteme
 
Wieviel client braucht das web
Wieviel client braucht das webWieviel client braucht das web
Wieviel client braucht das web
 
.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1.NET Summit 2016 in München: ASP.NET Core 1
.NET Summit 2016 in München: ASP.NET Core 1
 
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
Überblick zu Angular2 auf DevCon der Fox-Pro-Usergroup in Frankfurt, Nov 2015
 
Angular2
Angular2Angular2
Angular2
 
Shortcodes erstellen mit WordPress
Shortcodes erstellen mit WordPressShortcodes erstellen mit WordPress
Shortcodes erstellen mit WordPress
 
Christian heilmann html 5 - das web und der browser als platform
Christian heilmann   html 5 - das web und der browser als platformChristian heilmann   html 5 - das web und der browser als platform
Christian heilmann html 5 - das web und der browser als platform
 
PHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-AnsätzePHP-Module in statischen Seiten - Architektur-Ansätze
PHP-Module in statischen Seiten - Architektur-Ansätze
 
Legacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpenLegacy WebApps mit AngularJS pimpen
Legacy WebApps mit AngularJS pimpen
 
Web-GUIs mit Vaadin
 Web-GUIs mit Vaadin Web-GUIs mit Vaadin
Web-GUIs mit Vaadin
 

Welches Webframework passt zu mir? (WJAX)