Architecture and RxJava

Architecture
with RxJava
Jolanda Verhoef
Blendle
Makes the world’s best
journalism available to
everyone, everywhere
@lojanda
Blendle
Makes the world’s best
journalism available to
everyone, everywhere
@lojanda
Architecture
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
@lojanda
Reactive Programming
@lojanda
Today’s subjects
Building standalone UI components
Building real standalone UI components
Synchronising UI components throughout the app
Updating lists after user interaction
@lojanda
Today’s subjects
Building standalone UI components
Building real standalone UI components
Synchronising UI components throughout the app
Updating lists after user interaction
@lojanda
Standalone UI components
Opening the Blendle Reader
@lojanda
Standalone UI components
Opening the Blendle Reader
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
@lojanda
ArticlePreviewRepository
public Single<ArticlePreview> articlePreview$(
String articleId ) {
if ( cache.contains( articleId ) {
return Single.just( cache.retrieve( articleId ));
} else {
return urlResolver.urlFor( articleId )
.flatMap( blendleApi::articlePreview$ )
.doOnSuccess( cache::store );
}
}
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
GetArticlePreviewUseCase
public Single<ArticlePreview> execute( String articleId ) {
return articleRepository.articlePreview$( articleId )
.subscribeOn( Schedulers.io() )
.observeOn( AndroidSchedulers.mainThread() );
}
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
ReaderPresenter
public void init( String articleId ) {
getArticlePreviewUseCase.execute( articleId )
.subscribe(
getView()::showArticlePreview,
getView()::loadArticlePreviewFailed );
}
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
Today’s subjects
Building standalone UI components
Building real standalone UI components
Synchronising UI components throughout the app
Updating lists after user interaction
@lojanda
Standalone UI components++
Inside the Blendle Reader
@lojanda
@lojanda
ReaderFragment
@lojanda
ReaderFragment
Toolbar
Featured Image
RecyclerView
@lojanda
ReaderFragment
Toolbar
Featured Image
RecyclerView
Publisher Logo
Bookmark Icon
Share Icon
Text Row
Image Row
……. Row
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
@lojanda
@lojanda
ArticleContextStore
private BehaviorSubject<String> subject;
public void changeArticleContext( final String newArticleId )
{
subject.onNext( newArticleId );
}
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
Reader
@Override public View onCreateView( … ) {
presenter.init( getArguments() != null ?
getArguments().getInt( EXTRA_ARTICLE_ID ) :
null );
}
@lojanda
public void init( @Nullable String articleId ) {
if( articleId == null)
articleId = articleContextStore.getArticleContext();
loadData( articleId );
}
VIEWPRESENTER
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
Today’s subjects
Building standalone UI components
Building real standalone UI components
Synchronising UI components throughout the app
Updating lists after user interaction
@lojanda
Synchronising UI components
Bookmarking an article
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
BookmarkStore
private Map<String, BehaviorSubject<Boolean>> subjectMap;
public BehaviorSubject<Boolean> getBookmarked( String articleId ) {
if( subjectMap.contains( articleId )
return subjectMap.get( articleId );
BehaviorSubject<Boolean> subject = BehaviorSubject.create();
subjectMap.put( articleId, subject );
return subject;
}
public void setBookmarked( String articleId, Boolean bookmarked ) {
getBookmarked().onNext( bookmarked );
}
@lojanda
BookmarkRepository
public Observable<Boolean> bookmarked$( String articleId ) {
BehaviorSubject<Boolean> subject = bookmarkStore
.getBookmarked( articleId );
if( ! subject.hasValue() ) {
this.bookmarkedCall( articleId )
.subscribe( bookmarkStore::setBookmarked );
}
return subject;
}
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
GetBookmarkUseCase
public Observable<Boolean> execute( String articleId ) {
return bookmarkRepository.bookmarked$( articleId )
.subscribeOn( Schedulers.io() )
.observeOn( AndroidSchedulers.mainThread() );
}
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
BookmarkPresenter
public void init( String articleId ) {
getBookmarkUseCase.execute( articleId )
.subscribe( getView()::showBookmarkValue );
}
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
Today’s subjects
Building standalone UI components
Building real standalone UI components
Synchronising UI components throughout the app
Updating lists after user interaction
@lojanda
Updating lists
Article reading list
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
@lojanda
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
BookmarkStore
private PublishSubject<Pair<String, Boolean>> subject;
public Observable<Boolean> getBookmarkListener() {
return subject;
}
public void setBookmarked( String articleId, Boolean bookmarked ) {
getBookmarked( articleId ).onNext( bookmarked );
subject.onNext( new Pair<>( articleId, bookmarked );
}
@lojanda
ReadingListPresenter
public void init() {
bookmarkStore.getBookmarkListener()
.subscribe( this::bookmarkChanged );
}
public void bookmarkChanged( Pair<String, Boolean> pair ) {
String articleId = pair.first;
Boolean newBookmarkValue = pair.second;
if( newBookmarkValue ) {
getView().addBookmark( articleId );
} else {
getView().removeBookmark( articleId );
}
}
@lojanda
Mutable Data Stores
Context
Stores
Mutable Data Repositories
Static Data
Repositories
Business Use Cases
Presenters
Custom Views Fragments Activities
Today’s subjects
Building standalone UI components
Building real standalone UI components
Synchronising UI components throughout the app
Updating lists after user interaction
@lojanda
Questions?
Architecture
https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
Static data

http://blog.danlew.net/2015/06/22/loading-data-from-multiple-sources-with-rxjava/
Mutable data
http://reactivex.io/RxJava/javadoc/rx/subjects/BehaviorSubject.html
http://reactivex.io/RxJava/javadoc/rx/subjects/PublishSubject.html
https://lorentzos.com/rxjava-as-event-bus-the-right-way-10a36bdd49ba
@lojanda
1 of 38

Recommended

What is hibernate? by
What is hibernate?What is hibernate?
What is hibernate?kanchanmahajan23
49 views4 slides
idlesign/django-sitecats · GitHub by
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHubclammyhysteria698
81 views2 slides
idlesign/django-sitecats · GitHub by
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHubclammyhysteria698
89 views2 slides
idlesign/django-sitecats · GitHub by
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHubsomberfan2012
55 views2 slides
idlesign/django-sitecats · GitHub by
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHubsuccessfuloutdo12
201 views2 slides
idlesign/django-sitecats · GitHub by
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHubsomberfan2012
35 views2 slides

More Related Content

What's hot

idlesign/django-sitecats · GitHub by
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHubsomberfan2012
32 views2 slides
idlesign/django-sitecats · GitHub by
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHubsomberfan2012
44 views2 slides
idlesign/django-sitecats · GitHub by
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHubflagrantlawsuit53
87 views2 slides
idlesign/django-sitecats · GitHub by
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHubsuccessfuloutdo12
79 views2 slides
idlesign/django-sitecats · GitHub by
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHubludicrousexcerp10
67 views2 slides
idlesign/django-sitecats · GitHub by
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHubludicrousexcerp10
88 views2 slides

What's hot(16)

idlesign/django-sitecats · GitHub by somberfan2012
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHub
somberfan201232 views
idlesign/django-sitecats · GitHub by somberfan2012
idlesign/django-sitecats · GitHubidlesign/django-sitecats · GitHub
idlesign/django-sitecats · GitHub
somberfan201244 views
Optimizing Code Reusability for SharePoint using Linq to SharePoint & the MVP... by Sparkhound Inc.
Optimizing Code Reusability for SharePoint using Linq to SharePoint & the MVP...Optimizing Code Reusability for SharePoint using Linq to SharePoint & the MVP...
Optimizing Code Reusability for SharePoint using Linq to SharePoint & the MVP...
Sparkhound Inc.688 views
6. hibernate by AnusAhmad
6. hibernate6. hibernate
6. hibernate
AnusAhmad491 views
Orion context broker webminar 2013 06-19 by Fermin Galan
Orion context broker webminar 2013 06-19Orion context broker webminar 2013 06-19
Orion context broker webminar 2013 06-19
Fermin Galan3K views
SharePoint solution developer exam 70-488 by Ahmed Tawfik
SharePoint solution developer exam 70-488SharePoint solution developer exam 70-488
SharePoint solution developer exam 70-488
Ahmed Tawfik7.8K views
Exam 70-489 Developing Microsoft SharePoint Server 2013 Advanced Solutions Le... by Mahmoud Hamed Mahmoud
Exam 70-489 Developing Microsoft SharePoint Server 2013 Advanced Solutions Le...Exam 70-489 Developing Microsoft SharePoint Server 2013 Advanced Solutions Le...
Exam 70-489 Developing Microsoft SharePoint Server 2013 Advanced Solutions Le...
Mahmoud Hamed Mahmoud14.3K views
Orion Context Broker workshop (CPMX5) by Fermin Galan
Orion Context Broker workshop (CPMX5)Orion Context Broker workshop (CPMX5)
Orion Context Broker workshop (CPMX5)
Fermin Galan2K views

Viewers also liked

Types of malware by
Types of malwareTypes of malware
Types of malwaretechexpert2345
5.5K views14 slides
urbanvelo40 by
urbanvelo40urbanvelo40
urbanvelo40Krista Carlson
206 views64 slides
Project/Problem Based Learning Unit (audia marisol) by
Project/Problem Based Learning Unit (audia marisol)Project/Problem Based Learning Unit (audia marisol)
Project/Problem Based Learning Unit (audia marisol)Marisol Audia
339 views11 slides
Día del agua by
Día del aguaDía del agua
Día del aguaubaldojose11
64 views10 slides
2016_HMK Portfolio_JHumphries by
2016_HMK Portfolio_JHumphries2016_HMK Portfolio_JHumphries
2016_HMK Portfolio_JHumphriesJoseph Humphries
72 views7 slides
Gestion proyecto empresa by
Gestion proyecto  empresaGestion proyecto  empresa
Gestion proyecto empresaAnthony Lopez
351 views172 slides

Viewers also liked(10)

Similar to Architecture and RxJava

Современная архитектура Android-приложений - Archetype / Степан Гончаров (90 ... by
Современная архитектура Android-приложений - Archetype / Степан Гончаров (90 ...Современная архитектура Android-приложений - Archetype / Степан Гончаров (90 ...
Современная архитектура Android-приложений - Archetype / Степан Гончаров (90 ...Ontico
513 views48 slides
Building Modern Apps using Android Architecture Components by
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture ComponentsHassan Abid
716 views64 slides
Android Architecture Components with Kotlin by
Android Architecture Components with KotlinAndroid Architecture Components with Kotlin
Android Architecture Components with KotlinAdit Lal
827 views55 slides
The Best Way to Become an Android Developer Expert with Android Jetpack by
The Best Way to Become an Android Developer Expert  with Android JetpackThe Best Way to Become an Android Developer Expert  with Android Jetpack
The Best Way to Become an Android Developer Expert with Android JetpackAhmad Arif Faizin
200 views96 slides
20200815 inversions by
20200815 inversions20200815 inversions
20200815 inversionsChiwon Song
208 views42 slides
Introduction to Datastore by
Introduction to DatastoreIntroduction to Datastore
Introduction to DatastoreSoftware Park Thailand
1.3K views34 slides

Similar to Architecture and RxJava(20)

Современная архитектура Android-приложений - Archetype / Степан Гончаров (90 ... by Ontico
Современная архитектура Android-приложений - Archetype / Степан Гончаров (90 ...Современная архитектура Android-приложений - Archetype / Степан Гончаров (90 ...
Современная архитектура Android-приложений - Archetype / Степан Гончаров (90 ...
Ontico513 views
Building Modern Apps using Android Architecture Components by Hassan Abid
Building Modern Apps using Android Architecture ComponentsBuilding Modern Apps using Android Architecture Components
Building Modern Apps using Android Architecture Components
Hassan Abid716 views
Android Architecture Components with Kotlin by Adit Lal
Android Architecture Components with KotlinAndroid Architecture Components with Kotlin
Android Architecture Components with Kotlin
Adit Lal827 views
The Best Way to Become an Android Developer Expert with Android Jetpack by Ahmad Arif Faizin
The Best Way to Become an Android Developer Expert  with Android JetpackThe Best Way to Become an Android Developer Expert  with Android Jetpack
The Best Way to Become an Android Developer Expert with Android Jetpack
Ahmad Arif Faizin200 views
20200815 inversions by Chiwon Song
20200815 inversions20200815 inversions
20200815 inversions
Chiwon Song208 views
CCCDjango2010.pdf by jayarao21
CCCDjango2010.pdfCCCDjango2010.pdf
CCCDjango2010.pdf
jayarao211 view
Relevance trilogy may dream be with you! (dec17) by Woonsan Ko
Relevance trilogy  may dream be with you! (dec17)Relevance trilogy  may dream be with you! (dec17)
Relevance trilogy may dream be with you! (dec17)
Woonsan Ko1.2K views
Java Web Programming on Google Cloud Platform [2/3] : Datastore by IMC Institute
Java Web Programming on Google Cloud Platform [2/3] : DatastoreJava Web Programming on Google Cloud Platform [2/3] : Datastore
Java Web Programming on Google Cloud Platform [2/3] : Datastore
IMC Institute724 views
07_UIAndroid.pdf by ImranS18
07_UIAndroid.pdf07_UIAndroid.pdf
07_UIAndroid.pdf
ImranS182 views
Android Jetpack - Google IO Extended Singapore 2018 by Hassan Abid
Android Jetpack - Google IO Extended Singapore 2018Android Jetpack - Google IO Extended Singapore 2018
Android Jetpack - Google IO Extended Singapore 2018
Hassan Abid494 views
Developing your first application using FI-WARE by Fermin Galan
Developing your first application using FI-WAREDeveloping your first application using FI-WARE
Developing your first application using FI-WARE
Fermin Galan17.4K views
Rapid web application development using django - Part (1) by Nishant Soni
Rapid web application development using django - Part (1)Rapid web application development using django - Part (1)
Rapid web application development using django - Part (1)
Nishant Soni246 views
160714 roppongi aar3_how_to_implement_activity by Tsuyoshi Yoshioka
160714 roppongi aar3_how_to_implement_activity160714 roppongi aar3_how_to_implement_activity
160714 roppongi aar3_how_to_implement_activity
Tsuyoshi Yoshioka1.7K views
Making App Developers More Productive by Postman
Making App Developers More ProductiveMaking App Developers More Productive
Making App Developers More Productive
Postman126 views
Django 1.10.3 Getting started by MoniaJ
Django 1.10.3 Getting startedDjango 1.10.3 Getting started
Django 1.10.3 Getting started
MoniaJ533 views
Time to React! by STX Next
Time to React!Time to React!
Time to React!
STX Next290 views
Approaches to mobile site development by Erik Mitchell
Approaches to mobile site developmentApproaches to mobile site development
Approaches to mobile site development
Erik Mitchell941 views
WebNet Conference 2012 - Designing complex applications using html5 and knock... by Fabio Franzini
WebNet Conference 2012 - Designing complex applications using html5 and knock...WebNet Conference 2012 - Designing complex applications using html5 and knock...
WebNet Conference 2012 - Designing complex applications using html5 and knock...
Fabio Franzini1.6K views

Recently uploaded

HTTP headers that make your website go faster - devs.gent November 2023 by
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023Thijs Feryn
26 views151 slides
Five Things You SHOULD Know About Postman by
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About PostmanPostman
38 views43 slides
Design Driven Network Assurance by
Design Driven Network AssuranceDesign Driven Network Assurance
Design Driven Network AssuranceNetwork Automation Forum
19 views42 slides
"Running students' code in isolation. The hard way", Yurii Holiuk by
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk Fwdays
24 views34 slides
Future of AR - Facebook Presentation by
Future of AR - Facebook PresentationFuture of AR - Facebook Presentation
Future of AR - Facebook PresentationRob McCarty
22 views27 slides
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc
72 views29 slides

Recently uploaded(20)

HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn26 views
Five Things You SHOULD Know About Postman by Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman38 views
"Running students' code in isolation. The hard way", Yurii Holiuk by Fwdays
"Running students' code in isolation. The hard way", Yurii Holiuk "Running students' code in isolation. The hard way", Yurii Holiuk
"Running students' code in isolation. The hard way", Yurii Holiuk
Fwdays24 views
Future of AR - Facebook Presentation by Rob McCarty
Future of AR - Facebook PresentationFuture of AR - Facebook Presentation
Future of AR - Facebook Presentation
Rob McCarty22 views
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f... by TrustArc
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc Webinar - Managing Online Tracking Technology Vendors_ A Checklist f...
TrustArc72 views
Special_edition_innovator_2023.pdf by WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2218 views
Piloting & Scaling Successfully With Microsoft Viva by Richard Harbridge
Piloting & Scaling Successfully With Microsoft VivaPiloting & Scaling Successfully With Microsoft Viva
Piloting & Scaling Successfully With Microsoft Viva
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading... by The Digital Insurer
Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...Webinar : Desperately Seeking Transformation - Part 2:  Insights from leading...
Webinar : Desperately Seeking Transformation - Part 2: Insights from leading...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by James Anderson
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
James Anderson126 views
PharoJS - Zürich Smalltalk Group Meetup November 2023 by Noury Bouraqadi
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023
Noury Bouraqadi139 views
"Surviving highload with Node.js", Andrii Shumada by Fwdays
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada
Fwdays33 views
TouchLog: Finger Micro Gesture Recognition Using Photo-Reflective Sensors by sugiuralab
TouchLog: Finger Micro Gesture Recognition  Using Photo-Reflective SensorsTouchLog: Finger Micro Gesture Recognition  Using Photo-Reflective Sensors
TouchLog: Finger Micro Gesture Recognition Using Photo-Reflective Sensors
sugiuralab23 views
SAP Automation Using Bar Code and FIORI.pdf by Virendra Rai, PMP
SAP Automation Using Bar Code and FIORI.pdfSAP Automation Using Bar Code and FIORI.pdf
SAP Automation Using Bar Code and FIORI.pdf

Architecture and RxJava