MVVM und FRP - nua-schroers.de · Lifecycle-Management Entscheidungen, Workflow, Zustand des Views...

Post on 21-May-2020

0 views 0 download

transcript

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/