![Page 1: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/1.jpg)
MVVM und FRPPerfekte Architekturen für mobile Plattformen?
![Page 2: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/2.jpg)
Mailingliste: Beispiel-App mit Programmcode und Diskussion
http://dwx2016.nua-schroers.de
![Page 3: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/3.jpg)
http://www.ma-design.de/bsh-home-connect/
![Page 4: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/4.jpg)
http://www.ma-design.de/bsh-home-connect/
![Page 5: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/5.jpg)
http://www.ma-design.de/bsh-home-connect/
![Page 6: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/6.jpg)
Das Streichholzspiel
![Page 7: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/7.jpg)
Animation zumEntfernen
Buttonzustände hängen vom Spielstand ab
![Page 8: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/8.jpg)
![Page 9: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/9.jpg)
Wer entscheidet, wann der Dialog angezeigt wird?
![Page 10: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/10.jpg)
![Page 11: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/11.jpg)
![Page 12: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/12.jpg)
![Page 13: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/13.jpg)
![Page 14: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/14.jpg)
Image taken from Wikipedia (CC BY-SA 4.0 license): https://en.wikipedia.org/wiki/Martin_Fowler#/media/File:Webysther_20150414193208_-_Martin_Fowler.jpg
Model-View-PresenterErfunden von Martin Fowler
![Page 15: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/15.jpg)
![Page 16: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/16.jpg)
Lifecycle-Management
Entscheidungen, Workflow, Zustand des Views
KEINE Referenzen auf/ Instanziierung vonViewController oder Views!
KEINE Referenzen auf Presentation Model!
![Page 17: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/17.jpg)
![Page 18: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/18.jpg)
![Page 19: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/19.jpg)
MainViewController:
MainViewModel:
![Page 20: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/20.jpg)
Vollständige Unit-Testbarkeit!
![Page 21: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/21.jpg)
–John Gossman, http://blogs.msdn.com/b/johngossman/archive/2006/03/04/543695.aspx
“For simple UI, M-V-VM can be overkill. In bigger cases, it can be hard to design the ViewModel up front in order to get the right
amount of generality.”
![Page 22: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/22.jpg)
Functional Reactive Programming
![Page 23: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/23.jpg)
Imperative-style Lösung von Project Euler #1 https://projecteuler.net/problem=1
![Page 24: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/24.jpg)
Functional-style
![Page 25: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/25.jpg)
Functional-style
![Page 26: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/26.jpg)
Delegate
Target-Action
ListenersNotification
NotificationCenter
Data sourceKVO
IPropertyChangedListener
IntentURL-responder
Futur
e/pro
mise
![Page 27: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/27.jpg)
Event
![Page 28: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/28.jpg)
http://conal.net/papers/icfp97/Conal Elliott und Paul Hudak
![Page 29: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/29.jpg)
Finde alle Doppel-Clicks in einem Stream von Events https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
![Page 30: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/30.jpg)
Finde alle Doppel-Clicks in einem Stream von Events https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
stream.throttle(0.25)
.map({ len($0) })
.filter({ $0 > 1})
![Page 31: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/31.jpg)
![Page 32: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/32.jpg)
![Page 33: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/33.jpg)
MainViewModel.swift
MainViewController.swift
![Page 34: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/34.jpg)
![Page 35: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/35.jpg)
![Page 36: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/36.jpg)
MainViewModel.swift
MainViewController.swift
![Page 37: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/37.jpg)
![Page 38: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/38.jpg)
![Page 39: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/39.jpg)
Volle Unit-Testbarkeit!
![Page 40: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/40.jpg)
Verhalten kann auf VM-Ebene geändert werden
![Page 41: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/41.jpg)
Tu und Tu-Nicht
![Page 42: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/42.jpg)
• CollectionViews, insbesondere Tabellenzellen
• Speicherlecks/Blöcke mit Objective-C
• Zu starke Verwendung von deklarativen Konstrukten (Callbacks within Callbacks within…)
• Größere Komplexität/weniger Unterstützung beim Debugging
• Fundamentalistische Anwendung eines Paradigma
![Page 43: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/43.jpg)
Zusammenfassung
![Page 44: MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views KEINE Referenzen auf/ Instanziierung von ViewController oder Views! KEINE Referenzen](https://reader035.vdocuments.pub/reader035/viewer/2022081607/5ec675f5338f896c77290ed9/html5/thumbnails/44.jpg)
Referenzen• MVC:
http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html
• MVVM:https://github.com/ColinEberhardt/ReactiveTwitterSearch http://www.codeproject.com/Articles/166952/androidbinding.aspx
• FRP:https://gist.github.com/staltz/868e7e9bc2a7b8c1f754 https://gist.github.com/JaviLorbada/4a7bd6129275ebefd5a6 https://github.com/ReactiveCocoa/ReactiveCocoa https://github.com/ReactiveX/RxSwift https://www.raywenderlich.com/126522/reactivecocoa-vs-rxswift https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxClojure https://github.com/Reactive-Extensions/RxCpp https://github.com/ReactiveX/RxPY
• HomeConnect/ma design: http://home-connect.com/de/en/ http://www.ma-design.de/bsh-home-connect/