SlideShare a Scribd company logo
MVVM ! RxSwift
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 1
HELLO!!!
Dang Thai Son
• iOS Developer 2+ years experience
• Interested in Functional Programming
• Going to learn Elm/Haskell this year.
• Blog: https://dangthaison91.wordpress.com
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 2
Who is you writing Swift?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 3
Did you ever know MVVM
or using it now?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 4
Functional
Reactive
Programming?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 5
Why MVVM?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 6
MVC is the King
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 7
You drunk!!!
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 8
Apple’s Expected MVC
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 9
Actual Apple’s MVC
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 10
MVC
Start project from scratch:
• Project grow bigger with more features
• Run for deadline
=> Do you try to update / add functions after 1-2
months later?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 11
Actual Apple’s MVC
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 12
MVC
Plain old MVC is leads to huge, disorganized,
unmaintainable code (most of it in a
UIViewController).
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 13
MVVM
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 14
View Controllers
• Responsible for controlling views (Layout,
Animation, Colors, Presenting VC...)
• Tell ViewModel when something happens
(handles user interaction).
• Listen to ViewModel (network request
completes, data changed).
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 15
View Models
• Perform all the business logic (fire-off network
requests, fetch Core Data objects, validate
input...)
• Deliver necessary data to view controllers to
display: Date/String format.
• Update and listen to changes in models
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 16
Demo
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 17
Advantages
1. Maintainability
• Separation of concerns
• Redesign UI
2. Testability
• Easy to write unit test.
• No require UI Automation
3. Extensibility: More reusable for iOS, watchOS,
MacOS...
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 18
Disadvantages
• Can be overkill for Simple UI: Tutorial/
Walkthrough
• Massive View Controller will become Massive
ViewModel
• MVC is has better speed of the development.
• Hard to design the ViewModel.
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 19
Rules!!!
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 20
View Controllers
• View only knows the view controllers,
notifying them of interaction events (same as
MVC).
• View controller can't talk to models directly,
they only interact with view models and views.
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 21
View Models
• Don’t import UIKit.
• View Model only knows models.
• View Model doesn't know Views/View
Controllers
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 22
MVVM is silver
bullet and will save
your life from MVC?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 23
Just a SMALL
improvement!
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 24
How can
ViewModel notify
data changes?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 25
Delegate?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 26
KVO
NSNotification
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 27
Maybe[Closure]
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 28
Microsoft created
MVVM.
What do they thing?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 29
Rx Extension for Binding
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 30
What is Functinal Reactive
Programming?
• FRP is about datatypes that represent a value
‘over time’
• FRP is programming with asynchronous data
streams.
• ...
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 31
FRP is programming with streams of values over
time
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 32
Now for magic!
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 33
What we can do
• Observables
• Transformations
• Composition
• Combination
• Filter
• Buffer
...
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 34
FRP is just Binding???
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 35
FRP Advantages
• Code more concise & clear, easy to
understand without context
• Readability, highly express
• Make Asynchronous easier
• UI Binding
• Maintainability, Extensibility
...
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 36
What are the
advantages we got
in production?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 37
FRP Advantages
• Readable declarative code: review, test,
debug
• Has a standard mechanism for error recovery.
• Composing is awesome!!!
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 38
FRP Advantages
• Handling UI interactions/events/state is
insanely easy
• Reduce side-effects & using mutable values.
• Remove “callback hell”
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 39
FRP Advantages
FRP helps us focus on solving the problem rather
than the required procedure.
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 40
Visit my blog!
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 41
Best Practices!
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 42
Best Practices
View Model doesn't know about View Controller.
=> So how it give know what information VC
need?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 43
Protocol
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 44
Best Practices
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 45
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 46
Best Practices
Immutable View Model: Dependence injection via initializer
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 47
Best Practices
Storyboard???
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 48
Explicit
Data Flow
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 49
Flux
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 50
Demo: Github
Search
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 51
MVVM rules with RxSwift
View cannot modify the data.
View only knows how to present the data.
• Bad
viewModel.title
.map { $0 + "!!!" } // View should not modify the data
.bindTo(self.titleLabel)
• Good
viewModel.title
.bindTo(self.titleLabel)
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 52
MVVM rules with RxSwift
View doesn't know what ViewModel does.
View can only communicate to ViewModel about what View did.
• Bad
viewModel.login() // Bad: View should not know what
ViewModel does (login)
• Good
self.loginButton.rx_tap
.bindTo(viewModel.loginButtonDidTap) // "Hey I
clicked the login button"
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 53
MVVM rules with RxSwift
Model is hidden by ViewModel. ViewModel only exposes the minimum
data so that View can render.
• Bad
struct ProductViewModel {
let product: Driver<Product> // Bad: ViewModel should hide
Model
}
• Good
struct ProductViewModel {
let productName: Driver<String>
let formattedPrice: Driver<String>
}
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 54
Tips
• Handle error: parse Error Message in
ViewModel then expose as String.
=> Oops, we are doing it wrong too.
• Don't make ViewModelM become Presenter
layer: number of rows, color...
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 55
Naming?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 56
There are only two hard things in Computer
Science:
Cache invalidation and Naming things.
— Phil Karlton
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 57
Naming?
• Relate to Data, Action, not related to UI
• Input: Trigger, Source, Action...
• Output: Signal, Sink...
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 58
Q&A
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 59
Q&A
View Model should be Struct or Class?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 60
Q&A
N-ViewController <-> 1-ViewModel?
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 61
Q&A
1-ViewController <-> N-ViewModel !!!
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 62
Q&A
Where MVVM suck: UI with complex state &
levels.
=> Solution:
• VIPER !
• Flux/Redux ""
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 63
Reactive with us, we are hiring!
• PHP/Ruby Backend
• Android Developer
• iOS with Swift
• Designer
https://itviec.com/companies/innovatube
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 64
Thank you!
https://dangthaison91.wordpress.com
@dangthaison91
https://dangthaison91.wordpress.com | fb.me/dangthaison.91 | @dangthaison91 65

More Related Content

What's hot

Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean Architecture
Mattia Battiston
 
MVVM in iOS presentation
MVVM in iOS presentationMVVM in iOS presentation
MVVM in iOS presentation
G ABHISEK
 
A Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation SlidesA Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation Slides
thinkddd
 
NestJS
NestJSNestJS
NestJS
Wilson Su
 
Designing a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd productsDesigning a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd products
Julian Mazzitelli
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
Nguyen Tung
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
Ryan Riley
 
MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )
Ahmed Emad
 
SOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principles
Sergey Karpushin
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
Knoldus Inc.
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architecture
The Software House
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
Purbarun Chakrabarti
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
Amazon Web Services
 
Hexagonal architecture - message-oriented software design
Hexagonal architecture  - message-oriented software designHexagonal architecture  - message-oriented software design
Hexagonal architecture - message-oriented software design
Matthias Noback
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring Boot
Mikalai Alimenkou
 
Clean architecture
Clean architectureClean architecture
Clean architecture
.NET Crowd
 
Azure kubernetes service (aks)
Azure kubernetes service (aks)Azure kubernetes service (aks)
Azure kubernetes service (aks)
Akash Agrawal
 
Don't Be Mocked by your Mocks - Best Practices using Mocks
Don't Be Mocked by your Mocks - Best Practices using MocksDon't Be Mocked by your Mocks - Best Practices using Mocks
Don't Be Mocked by your Mocks - Best Practices using Mocks
Victor Rentea
 
Dependency injection - the right way
Dependency injection - the right wayDependency injection - the right way
Dependency injection - the right way
Thibaud Desodt
 
DevOps with Chef
DevOps with ChefDevOps with Chef
DevOps with Chef
Kellton Tech Solutions Ltd
 

What's hot (20)

Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean Architecture
 
MVVM in iOS presentation
MVVM in iOS presentationMVVM in iOS presentation
MVVM in iOS presentation
 
A Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation SlidesA Practical Guide to Domain Driven Design: Presentation Slides
A Practical Guide to Domain Driven Design: Presentation Slides
 
NestJS
NestJSNestJS
NestJS
 
Designing a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd productsDesigning a complete ci cd pipeline using argo events, workflow and cd products
Designing a complete ci cd pipeline using argo events, workflow and cd products
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )MVVM ( Model View ViewModel )
MVVM ( Model View ViewModel )
 
SOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principlesSOLID, DRY, SLAP design principles
SOLID, DRY, SLAP design principles
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
Design patterns for microservice architecture
Design patterns for microservice architectureDesign patterns for microservice architecture
Design patterns for microservice architecture
 
Introduction to Spring Boot
Introduction to Spring BootIntroduction to Spring Boot
Introduction to Spring Boot
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
Hexagonal architecture - message-oriented software design
Hexagonal architecture  - message-oriented software designHexagonal architecture  - message-oriented software design
Hexagonal architecture - message-oriented software design
 
Hexagonal architecture with Spring Boot
Hexagonal architecture with Spring BootHexagonal architecture with Spring Boot
Hexagonal architecture with Spring Boot
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Azure kubernetes service (aks)
Azure kubernetes service (aks)Azure kubernetes service (aks)
Azure kubernetes service (aks)
 
Don't Be Mocked by your Mocks - Best Practices using Mocks
Don't Be Mocked by your Mocks - Best Practices using MocksDon't Be Mocked by your Mocks - Best Practices using Mocks
Don't Be Mocked by your Mocks - Best Practices using Mocks
 
Dependency injection - the right way
Dependency injection - the right wayDependency injection - the right way
Dependency injection - the right way
 
DevOps with Chef
DevOps with ChefDevOps with Chef
DevOps with Chef
 

Viewers also liked

Reactive Programming Patterns with RxSwift
Reactive Programming Patterns with RxSwiftReactive Programming Patterns with RxSwift
Reactive Programming Patterns with RxSwift
Florent Pillet
 
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
Mail.ru Group
 
Thinking Reactive
Thinking ReactiveThinking Reactive
Thinking Reactive
Thai Son Dang
 
Infinum Android Talks #20 - DiffUtil
Infinum Android Talks #20 - DiffUtilInfinum Android Talks #20 - DiffUtil
Infinum Android Talks #20 - DiffUtil
Infinum
 
Reactive Programming with RxSwift
Reactive Programming with RxSwiftReactive Programming with RxSwift
Reactive Programming with RxSwift
Scott Gardner
 
Reactive programming with RxSwift
Reactive programming with RxSwiftReactive programming with RxSwift
Reactive programming with RxSwift
Scott Gardner
 
Introduction to Functional Reactive Programming
Introduction to Functional Reactive ProgrammingIntroduction to Functional Reactive Programming
Introduction to Functional Reactive Programming
Đặng Thái Sơn
 
NSLogger - Cocoaheads Paris Presentation - English
NSLogger - Cocoaheads Paris Presentation - EnglishNSLogger - Cocoaheads Paris Presentation - English
NSLogger - Cocoaheads Paris Presentation - English
Florent Pillet
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoa
Florent Pillet
 
RxSwiftをバインディングツールとして使ってみる
RxSwiftをバインディングツールとして使ってみるRxSwiftをバインディングツールとして使ってみる
RxSwiftをバインディングツールとして使ってみる
Hironytic
 

Viewers also liked (10)

Reactive Programming Patterns with RxSwift
Reactive Programming Patterns with RxSwiftReactive Programming Patterns with RxSwift
Reactive Programming Patterns with RxSwift
 
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
«MVVM в Swift», Александр Зимин, независимый iOS-разработчик
 
Thinking Reactive
Thinking ReactiveThinking Reactive
Thinking Reactive
 
Infinum Android Talks #20 - DiffUtil
Infinum Android Talks #20 - DiffUtilInfinum Android Talks #20 - DiffUtil
Infinum Android Talks #20 - DiffUtil
 
Reactive Programming with RxSwift
Reactive Programming with RxSwiftReactive Programming with RxSwift
Reactive Programming with RxSwift
 
Reactive programming with RxSwift
Reactive programming with RxSwiftReactive programming with RxSwift
Reactive programming with RxSwift
 
Introduction to Functional Reactive Programming
Introduction to Functional Reactive ProgrammingIntroduction to Functional Reactive Programming
Introduction to Functional Reactive Programming
 
NSLogger - Cocoaheads Paris Presentation - English
NSLogger - Cocoaheads Paris Presentation - EnglishNSLogger - Cocoaheads Paris Presentation - English
NSLogger - Cocoaheads Paris Presentation - English
 
Introduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoaIntroduction to reactive programming & ReactiveCocoa
Introduction to reactive programming & ReactiveCocoa
 
RxSwiftをバインディングツールとして使ってみる
RxSwiftをバインディングツールとして使ってみるRxSwiftをバインディングツールとして使ってみる
RxSwiftをバインディングツールとして使ってみる
 

Similar to MVVM & RxSwift

Fringe Accessibility — Portland UX
Fringe Accessibility — Portland UXFringe Accessibility — Portland UX
Fringe Accessibility — Portland UX
Adrian Roselli
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in Rails
Jim Jeffers
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
Volkan Uzun
 
Validating Session Isolation for Web Crawling to Provide Data Integrity
Validating Session Isolation for Web Crawling to Provide Data IntegrityValidating Session Isolation for Web Crawling to Provide Data Integrity
Validating Session Isolation for Web Crawling to Provide Data Integrity
Giacomo Zecchini
 
Conquering Code with hjc
Conquering Code with hjcConquering Code with hjc
Conquering Code with hjc
hjc
 
Rails antipattern-public
Rails antipattern-publicRails antipattern-public
Rails antipattern-public
Chul Ju Hong
 
Rails antipatterns
Rails antipatternsRails antipatterns
Rails antipatterns
Chul Ju Hong
 
Introduction to Magento 2 module development - PHP Antwerp Meetup 2017
Introduction to Magento 2 module development - PHP Antwerp Meetup 2017Introduction to Magento 2 module development - PHP Antwerp Meetup 2017
Introduction to Magento 2 module development - PHP Antwerp Meetup 2017
Joke Puts
 
Writing code for others
Writing code for othersWriting code for others
Writing code for others
Amol Pujari
 
Real solutions, no tricks
Real solutions, no tricksReal solutions, no tricks
Real solutions, no tricks
Jens Grochtdreis
 
Auto Layout Under Control @ Pragma conference 2013
Auto Layout Under Control @ Pragma conference 2013Auto Layout Under Control @ Pragma conference 2013
Auto Layout Under Control @ Pragma conference 2013
Giuseppe Arici
 
Mobile Devices and SharePoint - Sahil Malik
Mobile Devices and SharePoint - Sahil MalikMobile Devices and SharePoint - Sahil Malik
Mobile Devices and SharePoint - Sahil Malik
SPC Adriatics
 
Mobile devices and SharePoint
Mobile devices and SharePointMobile devices and SharePoint
Mobile devices and SharePoint
maliksahil
 
Web Components
Web ComponentsWeb Components
Web Components
FITC
 
Adopting MVVM
Adopting MVVMAdopting MVVM
Adopting MVVM
John Cumming
 
Thin Controllers Fat Models - How to Write Better Code
Thin Controllers Fat Models - How to Write Better CodeThin Controllers Fat Models - How to Write Better Code
Thin Controllers Fat Models - How to Write Better Code
Dr. Syed Hassan Amin
 
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Doris Chen
 
Stapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoStapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San Francisco
Christian Heilmann
 
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
AOE
 
Imagine recap-devhub
Imagine recap-devhubImagine recap-devhub
Imagine recap-devhub
Magento Dev
 

Similar to MVVM & RxSwift (20)

Fringe Accessibility — Portland UX
Fringe Accessibility — Portland UXFringe Accessibility — Portland UX
Fringe Accessibility — Portland UX
 
Building Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in RailsBuilding Mobile Friendly APIs in Rails
Building Mobile Friendly APIs in Rails
 
ASP.NET MVC Presentation
ASP.NET MVC PresentationASP.NET MVC Presentation
ASP.NET MVC Presentation
 
Validating Session Isolation for Web Crawling to Provide Data Integrity
Validating Session Isolation for Web Crawling to Provide Data IntegrityValidating Session Isolation for Web Crawling to Provide Data Integrity
Validating Session Isolation for Web Crawling to Provide Data Integrity
 
Conquering Code with hjc
Conquering Code with hjcConquering Code with hjc
Conquering Code with hjc
 
Rails antipattern-public
Rails antipattern-publicRails antipattern-public
Rails antipattern-public
 
Rails antipatterns
Rails antipatternsRails antipatterns
Rails antipatterns
 
Introduction to Magento 2 module development - PHP Antwerp Meetup 2017
Introduction to Magento 2 module development - PHP Antwerp Meetup 2017Introduction to Magento 2 module development - PHP Antwerp Meetup 2017
Introduction to Magento 2 module development - PHP Antwerp Meetup 2017
 
Writing code for others
Writing code for othersWriting code for others
Writing code for others
 
Real solutions, no tricks
Real solutions, no tricksReal solutions, no tricks
Real solutions, no tricks
 
Auto Layout Under Control @ Pragma conference 2013
Auto Layout Under Control @ Pragma conference 2013Auto Layout Under Control @ Pragma conference 2013
Auto Layout Under Control @ Pragma conference 2013
 
Mobile Devices and SharePoint - Sahil Malik
Mobile Devices and SharePoint - Sahil MalikMobile Devices and SharePoint - Sahil Malik
Mobile Devices and SharePoint - Sahil Malik
 
Mobile devices and SharePoint
Mobile devices and SharePointMobile devices and SharePoint
Mobile devices and SharePoint
 
Web Components
Web ComponentsWeb Components
Web Components
 
Adopting MVVM
Adopting MVVMAdopting MVVM
Adopting MVVM
 
Thin Controllers Fat Models - How to Write Better Code
Thin Controllers Fat Models - How to Write Better CodeThin Controllers Fat Models - How to Write Better Code
Thin Controllers Fat Models - How to Write Better Code
 
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
 
Stapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San FranciscoStapling and patching the web of now - ForwardJS3, San Francisco
Stapling and patching the web of now - ForwardJS3, San Francisco
 
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
Magento 2 Best Practice Workfow // David Lambauer // Meet Magento 2017 // Lei...
 
Imagine recap-devhub
Imagine recap-devhubImagine recap-devhub
Imagine recap-devhub
 

Recently uploaded

E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
Hornet Dynamics
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
Hornet Dynamics
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
Gerardo Pardo-Castellote
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
Łukasz Chruściel
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
Google
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
Shane Coughlan
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
Quickdice ERP
 
What is Master Data Management by PiLog Group
What is Master Data Management by PiLog GroupWhat is Master Data Management by PiLog Group
What is Master Data Management by PiLog Group
aymanquadri279
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Envertis Software Solutions
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 

Recently uploaded (20)

E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
 
E-commerce Application Development Company.pdf
E-commerce Application Development Company.pdfE-commerce Application Development Company.pdf
E-commerce Application Development Company.pdf
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
Vitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdfVitthal Shirke Java Microservices Resume.pdf
Vitthal Shirke Java Microservices Resume.pdf
 
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf2024 eCommerceDays Toulouse - Sylius 2.0.pdf
2024 eCommerceDays Toulouse - Sylius 2.0.pdf
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppAI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
openEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain SecurityopenEuler Case Study - The Journey to Supply Chain Security
openEuler Case Study - The Journey to Supply Chain Security
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
 
What is Master Data Management by PiLog Group
What is Master Data Management by PiLog GroupWhat is Master Data Management by PiLog Group
What is Master Data Management by PiLog Group
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 

MVVM & RxSwift