Slide 1

Slide 1 text

MVC, MVP, MVVM Tech Talk Daniel Leonardis @HIFILEO https://github.com/HIFILEO @dan.leonardis - Medium

Slide 2

Slide 2 text

Goal • MVC • Define, History, Why, Use Cases, Failures • Clean Code • MVP • Define, History, Use Cases, Failures • MVVM • Define, History, Use Cases, Failures

Slide 3

Slide 3 text

Different != Wrong

Slide 4

Slide 4 text

MVC - Define • Model View Controller

Slide 5

Slide 5 text

MVC - History • Trygve Reenskaug • SmallTalk 76 (XEROX) • Real Simple Pattern

Slide 6

Slide 6 text

MVC - WHY • Simple Applications - Good! :-) • Separates internal representations from external. • OO - Modularity • OO - Reuse

Slide 7

Slide 7 text

MVC - Use Case • https://github.com/HIFILEO/fibonacci/tree/master/app/ src/main/java/com/appsbyleo/fibonacci

Slide 8

Slide 8 text

MVC - Failures

Slide 9

Slide 9 text

MVC - Failures

Slide 10

Slide 10 text

Clean Code

Slide 11

Slide 11 text

Clean Code • What do I gain by doing this? • Independent of Frameworks • Testable • Independent of UI • Independent of Database • Independent of any external agency

Slide 12

Slide 12 text

Inner Most Circle • Entities • Enterprises wide business rules • Business Rules • Application specific business rules

Slide 13

Slide 13 text

Middle Circle • Interface Adapters • Presenters / Views / View Models • Translation layer • Garbage In = Garbage Out

Slide 14

Slide 14 text

Outer Circle • The plugins! • Frameworks and tools • The details! • Though shall do no harm

Slide 15

Slide 15 text

Cross Boundary • •Flow of control • In Out In • Dependencies point inward = Contradiction • How to resolve = Dependency Inversion Principle

Slide 16

Slide 16 text

Clean Code

Slide 17

Slide 17 text

Dependency Inversion Principle • •Definition • •Rules • 1.) High-level modules should not depend on low-level modules. Both should depend on abstractions. • 2.) Abstraction should not depend on details. Details should depend on abstractions.

Slide 18

Slide 18 text

Traditional Layers

Slide 19

Slide 19 text

Dependency Inversion

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

Dependency Injection • •Achieve Dependency Inversion by using Dependency Injection

Slide 22

Slide 22 text

MVP - Define

Slide 23

Slide 23 text

MVP - Define

Slide 24

Slide 24 text

MVP - Define

Slide 25

Slide 25 text

MVP - History

Slide 26

Slide 26 text

MVP - Use Case • https://github.com/HIFILEO/MVPExample

Slide 27

Slide 27 text

MVP - Failures • Major Reasons (Death of MVP) • Data Binding • Rx • Architectural Components

Slide 28

Slide 28 text

MVP - Failures • Android Data Binding • Binding POJOs • Observable Updates

Slide 29

Slide 29 text

MVP - Failures • Subscribe? Bind?

Slide 30

Slide 30 text

MVP - Failures • Android’s ViewModel

Slide 31

Slide 31 text

MVVM - Define

Slide 32

Slide 32 text

MVVM - Define

Slide 33

Slide 33 text

MVVM - History • Microsoft 2005 • Ken Cooper and Ted Peters • Need • To simplify event-driven programming

Slide 34

Slide 34 text

MVVM - Use Cases • https://github.com/HIFILEO/MVVMReactive

Slide 35

Slide 35 text

MVVM - Failures Unless you can model your entire system synchronously, a single asynchronous source breaks imperative programming. Jake Wharton - Managing State with Rx

Slide 36

Slide 36 text

< > MVVM + RX - Failures

Slide 37

Slide 37 text

Reactive Architecture

Slide 38

Slide 38 text

No content