MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views...
Transcript of MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views...
MVVM und FRPPerfekte Architekturen für mobile Plattformen?
Mailingliste: Beispiel-App mit Programmcode und Diskussion
http://dwx2016.nua-schroers.de
http://www.ma-design.de/bsh-home-connect/
http://www.ma-design.de/bsh-home-connect/
http://www.ma-design.de/bsh-home-connect/
Das Streichholzspiel
Animation zumEntfernen
Buttonzustände hängen vom Spielstand ab
Wer entscheidet, wann der Dialog angezeigt wird?
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
Lifecycle-Management
Entscheidungen, Workflow, Zustand des Views
KEINE Referenzen auf/ Instanziierung vonViewController oder Views!
KEINE Referenzen auf Presentation Model!
MainViewController:
MainViewModel:
Vollständige Unit-Testbarkeit!
–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.”
Functional Reactive Programming
Imperative-style Lösung von Project Euler #1 https://projecteuler.net/problem=1
Functional-style
Functional-style
Delegate
Target-Action
ListenersNotification
NotificationCenter
Data sourceKVO
IPropertyChangedListener
IntentURL-responder
Futur
e/pro
mise
Event
http://conal.net/papers/icfp97/Conal Elliott und Paul Hudak
Finde alle Doppel-Clicks in einem Stream von Events https://gist.github.com/staltz/868e7e9bc2a7b8c1f754
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})
MainViewModel.swift
MainViewController.swift
MainViewModel.swift
MainViewController.swift
Volle Unit-Testbarkeit!
Verhalten kann auf VM-Ebene geändert werden
Tu und Tu-Nicht
• 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
Zusammenfassung
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/