App-Entwicklung mit React-Native, React und Redux

Ähnliche Dokumente
Hybride App-Entwicklung mit React-Native, React und Redux

Mobile Apps mit. React-Native. Manuel

Mobile Apps mit. React-Native. Manuel

JS goes mobile: Eine Übersicht. Frederik von Berg w11k / thecodecampus

Platform as a Service (PaaS) & Containerization

Echte Cross-Plattform Anwendungen mit Angular 2 in Action!

React.js flottes Front-End für Domino. Knut Herrmann

MOBILE ENTERPRISE APPLICATION PLATFORM (MEAP)

MOBILE ENTERPRISE APPLICATION PLATFORM (MEAP)

Abnahme leicht gemacht

ADF Mobile konkret Best Practices Live erklärt. Jan Ernst

App Entwicklung mit Hilfe von Phonegap. Web Advanced II - SS 2012 Jennifer Beckmann

Echte Cross-Plattform Anwendungen mit Angular 2 in Action!

Wir bringen Ihre Notes/Domino Anwendungen sicher ins Web , Bilster Berg Drive Resort Michael Steinhoff, agentbase AG.

Bekannte Tools in einem agilen Ansatz. Frank Schwichtenberg SourceTalkTage 2013 Göttingen,

Java.NET Web-Technologien Mobile

Cross-Platform Apps mit HTML5/JS/CSS/PhoneGap

Eine App, viele Plattformen

Cnlab/CSI Herbsttagung Apps und Sandboxen

Cnlab/CSI Herbstveranstaltung Apps und Sandboxen

Relution Enterprise Appstore. Enable Enterprise Mobility. 2.5 Release Note

Mobile hybride Applikationen Investment-App der BW-Bank

ATOMIC DESIGN DIE EINHEIT VON FRONTEND UND DESIGN IM RWD-ZEITALTER PATRICK LOBACHER +PLUSWERK AG WEBTECH CONFERENCE MÜNCHEN

Immer mehr lebt mobil

JavaFX auf Mobile. von Stefan Barth und Stefan Heinze

informatik ag IT mit klarer Linie S i e b e l O p e n U I

Spring Dynamic Modules for OSGi Service Platforms

APEX DESKTOP APPS. Interaktion mit dem Client System

Präsentation. Entwicklung eines Frameworks. in Forms 12c. - Light Version. Friedhold Matz. Forms Day Entwicklung eines Frameworks in Forms 12c

Scala für Enterprise-Applikationen

Mobile App Testing. Software Test im mobilen Umfeld ATB Expertentreff, Wien, Functional Test Automation Tools

Projektgruppe. Thomas Kühne. Komponentenbasiertes Software Engineering mit OSGi

Mit AngularJS Projekte schnell an die Wand fahren

Mathematik Seminar WS 2003: Simulation und Bildanalyse mit Java. Software-Architektur basierend auf dem Plug-in-Konzept

Apollo Überblick. Klaus Kurz. Manager Business Development Adobe Systems Incorporated. All Rights Reserved.

Mit AngularJS Projekte schnell an die Wand fahren

Forms auf Tablets. Vision oder Realität?

DevOps with AWS. Software Development und IT Operation Hand in Hand. Matthias Imsand CTO Amanox Solutions AG

Einführung in die Cross-Plattform Entwicklung Zugriff auf Sensoren mit dem Intel XDK

Kontinuierliche Architekturanalyse. in 3D

Mobile API 2.0 Partizipative App Entwicklung

MOBILE ON POWER MACHEN SIE IHRE ANWENDUNGEN MOBIL?!

Line-of-Business-Apps mit der Universal Windows Platform entwickeln. Thomas Claudius

Oracle BI Publisher - PDF und einiges mehr

Cross-Platform Mobile Apps

Kerry W. Zühlke Engineering GmbH

Entwicklungswerkzeuge & - methoden

DCCS Lotusphere Nachlese 2012 Was sind XPages? Mobile Features für XPages

Verbesserung des Prototyping Prozesses von Infotainment Systemen mit der Hilfe von Adobe Flash und Flex

Vergleich der Voice Assistenten

EINFÜHRUNG IN REACT.JS UND REDUX

Trivadis-Gadgets im Dienste ihrer Qualität: FAAT und PL/SQL Cop

ZenQuery - Enterprise Backend as a Service Single Page Applications mit AngularJS und Spring MVC. - Björn Wilmsmann -

ArcGIS Online Werkstatt II Wege zur eignen Webanwendung

Spring Dynamic Modules for OSGi Service Platforms

Continuous Database Integration mit Flyway

Basisworkshop inchorus Gadgets

Dominik Doerner, Jonathan Bechtle ESCde

Möglichkeiten, Vorteile und Grenzen der Cross-Plattform-Entwicklung

SIEBEL OPEN UI. Rhein-Main-Handel GmbH. Bankhaus Goldbaum GmbH & Co. KG. Standort: Düsseldorf. Standort: Frankfurt ilum:e informatik ag

WebApps in spezieller Umgebung

Entwicklung und Integration mobiler Anwendungen. <Speaker> Oracle Deutschland B.V. & Co. KG

Moderne Web- Anwendungen mit

Erfahrungen und Erkenntnisse. Klaus Richarz, HBT GmbH

HTML5 und das Framework jquery Mobile

Agon Solutions. The native web mobile Architekturen mit HTML5 und PhoneGap. Ihre Prozesse in besten Händen.

Oliver Zeigermann, Stefan Toth embarc GmbH. Flux Facebooks Beitrag zur UI- Architektur der Zukunft

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

XE IDE Cloud Web. secure Data Agile. RAD Studio XE was gibt es Neues in Delphi? Daniel Magin Delphi Experts. Daniel Wolf Delphi-Praxis

Automatisches Exploratives Testen von Webanwendungen

XPages Good to know. Benjamin Stein & Pierre Hein Stuttgart 7. Mai 2015

Mobility im Unternehmenseinsatz. Timo Deiner, Senior Presales Expert Mobility, SAP Deutschland Communication World 2012, 10.

Web-Anwendungsentwicklung mit dem Delivery Server

CSS Frameworks. Seminar Weiterführende Themen zu Internet- und WWW-Technologien. 9. Mai Johannes Schirrmeister

Welche Testautomatisierungen sind möglich und sinnvoll?

Nächste Generation von Web-Anwendungen mit Web Intents

NEUES AUS DER ENTWICKLUNG. April 2015

Agenda. Entmystifizierung. Fundamentaler Testprozess. Fazit. DevOps vs. Test Management

Deploy Early oder die richtigen. Zutaten für Ihren Relaunch

! Jahrgang ! Studium der Mathematik und Informatik an der TU Braunschweig. ! Entwicklung klassischer Client-Server-Systeme zur Terminplanung

Übung 1: Von einer naiven JavaScript Applikation zu einem modernen Front-End Build:

Inhaltsverzeichnis. Apps für Android entwickeln

Über mich. Daniel Bälz. Softwareentwickler (inovex GmbH) github.com/dbaelz

Multi-Tool Testlandschaft mit DDS


Mobile Development in.net mit Xamarin

Ein- und Ansichten DOAG Regionaltreffen Bremen Oktober 2010

Möglichkeiten, Vorteile und Grenzen der Cross-Plattform-Entwicklung

Automatisierte Akzeptanztests für ios-apps. Sven Günther it-agile GmbH

Zend PHP Cloud Application Platform

REST-Services mit Dropwizard ruck-zuck erstellt, dokumentiert und getestet

Entwicklung von effizienten UI-basierten Akzeptanztests für Webanwendungen

Spring IDE. Christian Dupuis - Spring 2.0 Release Party

HERZLICH WILLKOMMEN SHAREPOINT 2013 DEEP DIVE - APPS IOZ AG 1

Eclipse User Interface Guidelines

AJAX und Ruby on Rails

JavaFX im UI-Technologiedschungel

Magento Theming Ein Einstieg Rainer Wollthan

Transkript:

Experts in agile software engineering App-Entwicklung mit React-Native, React und Redux - Ein Erfahrungsbericht Rouven Röhrig und Raphael Knecht

Experts in agile software engineering 2 andrena Experts in agile software engineering Standorte: Mitarbeiter/innen: Technologien/Kernthemen: Köln Frankfurt Mannheim Karlsruhe Stuttgart München mehr als 225

3 Referenten Rouven Röhrig Raphael Knecht Full-Stack-Entwickler Java / JavaScript ASE / Clean Code Full-Stack-Entwickler Java / JavaScript rouven.roehrig@andrena.de raphael.knecht@andrena.de 2015 andrena objects ag

4 Agenda 1. Motivation 2. Vorstellung der Frameworks 3. Unsere Erfahrungen mit der App-Entwicklung 4. Fazit

5 Motivation Warum App-Entwicklung mit React-Native/React/Redux?

Experts in agile software engineering 6 Motivation Warum App-Entwicklung mit React-Native/React/Redux? Gemeinsame Codebasis für Android und ios: learn once, write anywhere Entwicklung in bekannter Sprache (JavaScript) mit bekannten Konzepten (z.b. Asynchronität, deklarative views, responsive design ) Einsatz moderner Technologien Große Community und stetige Weiterentwicklung der Frameworks

7 React und React-Native

Experts in agile software engineering 8 React JavaScript-Framework für (Web)-User-Interfaces Ermöglicht deklarative Views Komponentenbasiert Effizientes Rendering Deterministisches Rendering Ist nur die View Ermöglicht JSX

Experts in agile software engineering 9 Was ist JSX Syntactic sugar für Markup in JavaScript const style = { flex: 1 }; const MyComponent = () => ( <View style={style}> <Text>Hello World!</Text> </View> );

Experts in agile software engineering 10 React-Native Framework zum Bau nativer Apps in JavaScript React-Komponenten (Button, Text, FlatList ) Glue-Code: JavaScript Android/iOS Styling mit CSS und insb. Flexbox Buildtools Entwicklungstools

Experts in agile software engineering 11 React-Native Komponenten und APIs Komponenten Text, Button, InputField, Slider, Picker, FlatList,... APIs Vibration, Gelocation,

Experts in agile software engineering 12 React-Native Build- und Entwicklungstools Native App installieren Native App bauen Live Reload Hot Reload Remote JavaScript Debugging Inspector

Experts in agile software engineering 13 React-Native mit React Beliebige Kombination von React-(Native)- Komponenten Ermöglicht Strukturierung und Wiederverwendung von Komponenten

14 Redux Predictable state container

Experts in agile software engineering 15 Redux 3 Prinzipien und 3 Bausteine Single source of truth State is read-only Changes are made with pure functions 3 Bausteine Actions State Reducer

Experts in agile software engineering 16 Redux Actions Was soll sich ändern Eindeutiger Typ z.b. ADD_TODO Beliebiger Payload z.b. Titel Best Practice: Action-Creator Funktion, die Actions erstellt

Experts in agile software engineering 17 Redux State Wo soll es sich ändern Ein einziger Zustand Hierarchisch organisiert Store stellt Methoden zur Verfügung Best Practice: Selector Funktion für Zugriff auf State

Experts in agile software engineering 18 Redux Reducer Wie soll es sich ändern Reine Funktion (keine Seiteneffekte) Berechnet nächsten Zustand für Teil-State Deterministisch

Experts in agile software engineering 19 Redux Ducks Pattern: Ein Modul Eine Datei Reducer ist default export Action Creator sind named exports Action types haben die Form app-name/reducer-name/action_type Action types dürfen exportiert werden Empfehlung: Selectors sind named exports Quelle: https://github.com/erikras/ducks-modular-redux

Experts in agile software engineering 20 React + React-Native + Redux

21 Erfahrungsbericht Unsere Erfahrungen mit der App-Entwicklung und den Frameworks

22 Handhabung von Seiteneffekten

Experts in agile software engineering 23 Redux Wie und wo behandeln wir Seiteneffekte? Reducer sind reine Funktionen und dürfen/sollten keine Seiteneffekte beinhalten Eine Action sollte nur von einem Reducer behandelt werden Seiteneffekte werden typischerweise über eine Middleware abgebildet Zu den bekanntesten zählen Redux-Thunk und Redux-Saga

24 Redux Redux - Middleware Jede Middleware wird von jeder Action durchlaufen Erweiterungspunkt für verschiedene Anwendungsgebiete (z.b. Logging) Häufiges Anwendungsgebiet sind Seiteneffekte (z.b. Anfragen an eine API)

25 Redux Redux - Thunk Actions müssen nicht mehr nur plain objects sein Actions können weitere Actions anstoßen

26 Redux Redux - Saga Eine Saga reagiert auf gewisse Actions und ergänzt/behandelt deren Seiteneffekte Verschiedene Saga-Effekte vereinfachen die Behandlung von Asynchronität und Synchronität bei Seiteneffekten

27 Warum haben wir uns für Sagas entschieden? Klare Trennung zwischen Redux-Actions ( plain objects ) und Actions mit Seiteneffekten Saga-Effekte unterstützen bei der Behandlung von Asynchronität in einem synchronen Programmfluss (Stichwort: Generatorfunction ) Saga-Effekte kapseln Implementierungsdetails und unterstützen dabei, übersichtlichen Code zu schreiben

28 Qualitätssicherung - Code Einheitliche Codeformatierung und Design Pattern

Experts in agile software engineering 29 ESLint ESLint unterstützt eine einheitliche Formatierung und einheitliche Design Pattern Fördert Best Practice : comma dangle prefer stateless function

30 Qualitätssicherung - Unittests Welche Möglichkeiten bietet Jest?

Experts in agile software engineering 31 Jest - Automatisiertes Testen Auf React angepasstes Testing-Framework Basierte ursprünglich auf Jasmine Wir verwenden Jest für Unittests Schnelle Testausführung Snapshottests Zunehmend bessere IDE-Unterstützung

Experts in agile software engineering 32 Jest - Automatisiertes Testen React-Native, React - Komponenten Funktionalität (Enzyme)

Experts in agile software engineering 33 Jest - Automatisiertes Testen React-Native, React - Komponenten Snapshot-Tests

Experts in agile software engineering 34 Jest - Automatisiertes Testen Redux - Reducer und Action Creator Reducer sind pure functions und somit sehr gut zu testen Gemeinsame Tests mit Action Creator bieten sich an (weniger fragil) Tests orientieren sich an https://redux.js.org

Experts in agile software engineering 35 Jest - Automatisiertes Testen Redux - Saga Abhängigkeiten können gemockt werden Testen/Überprüfen der Actions

Experts in agile software engineering 36 Jest - Automatisiertes Testen Redux - Saga Abhängigkeiten können gemockt werden Testen/Überprüfen der Actions

37 Projektstrukturierung

Experts in agile software engineering 38 Projektstrukturierung Verzeichnisstruktur Trennung Test- und Source-Code Source-Code Module (Redux Ducks-Pattern) Sagas Komponenten Container (Kennen Redux) Darstellung (Kennen Redux nicht)

Experts in agile software engineering 39 Projektstrukturierung Container- und Darstellungs-Komponenten Container verdrahten Redux und React State -> Properties Actions -> Callbacks (Strikt Action Creators und Selectors) Darstellungskomponenten können Properties darstellen Aktionen initiieren

Experts in agile software engineering 40 Atomic Design Komponenten-Design in Anlehnung an Atomic Design Atome TextInput, Image, Label, Button, Moleküle SearchPanel (TextInput + Button), ListItem, LoginButton, Organismen Header, Footer, Form, ImagePicker, Templates Seiten Quelle Atomic Design : http://atomicdesign.bradfrost.com/

Experts in agile software engineering 41 Projektstrukturierung Redux und Redux-Sagas Sagas strukturieren in Anlehnung an Ducks Pattern Keine Sagas, die alles können Eine Verantwortlichkeit pro Saga / Redux-Modul

42 Build-Automatisierung Sind manuelle Schritte notwendig?

43 Build-Automatisierung Wir verwenden Jenkins und das Pipeline-Plugin Automatisiert: Messung der Code-Qualität, Build der Installationsdateien Deployment

44 Herausforderungen Keine Erfahrung in der App-Entwicklung - unsere Herausforderungen

45 Herausforderungen Deployment in AppStore und PlayStore Code-Signatur und automatisiertes Deployment

46 Herausforderungen Integration in native Android- und ios-app Nativer Glue-Code Kommunikation zwischen nativer App und JavaScript Automatisierte Tests

47 Herausforderungen Natives Verhalten bzw. plattformspezifisches UX/UI JavaScript-Package-Abhängigkeiten React-Native v. 0.50.0 Alpha- und Beta-Versionen Breaking Changes Kompatibilität mit Testingframeworks

48 Argumente für React-Native Welche Features überzeugen uns?

49 Hot Reloading Hot Reloading ermöglicht es Änderungen direkt anzuzeigen, dabei bleibt der App- bzw. Redux-Zustand erhalten

50 Debugging

51 Debugging

52 Schnelle Testausführung Direkte Testausführung ohne vorherigen Build Dauer im Sekundenbereich Ausführung über Command Line oder IDE

53 Snapshottests Snapshottests zeigen Änderungen bei der Darstellung direkt an

54 Fazit App-Entwicklung mit React-Native

55 Fazit Einstieg in React-Native ohne JavaScript-Erfahrung durchaus anspruchsvoll Probleme durch wenig Erfahrung in der App-Entwicklung ohne nativen Code geht es nicht Signatur und Deployment bei ios Plattformspezifisches UX/UI React-Native Versionen Monatliche Updates mit teilweise Breaking Changes

56 Fazit JavaScript-Frameworks: learn once, write anywhere Synergieeffekte z.b. Webentwicklung mit React/Redux Strikte Trennung von Darstellung und Zustand (bzw. Logik) Redux als Single source of truth -> deterministisches Verhalten Trennung von Seiteneffekten und normalen Redux-Actions JavaScript für bekannte Konzepte (z.b. Asynchronität, Styling mit Flexbox )

57 Fazit Codeänderungen werden sofort angezeigt Debugging umfangreich und einfach Unittests schnelle Ausführung Darstellungskomponenten können getestet werden hohe Testabdeckung >90% möglich