SlideShare a Scribd company logo
Intro to Five Architecture
29.09.2016@Five #IzSveSnagetomislav.homan@fiveminutes.eu
Or zero to clean….
Tomislav Homan, Five
Overview
● Earlier fails
● General Clean Architecture
● Clean Adjusted for Android
● Is it better?
● No code, just philosophy
Software Architecture
● “Intellectually graspable” abstraction of a complex system (wiki)
● (which helps us plan, design and construct software)
Software Architecture
● “Intellectually graspable” abstraction of a complex system (wiki)
● Multitude of stakeholders
● Separation of concerns - one reason to change
● Run away from the real world (Android, DB, Internet)
● Testability
● SRP + Testability + … = Maintainability, Scalability, etc...
The olden times - God activitypublic final class UsersActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
new ListUsers().execute();
}
private final class ListUsers extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
// final SQLiteOpenHelper sqLiteOpenHelper = ...
// JsonObjectRequest jsObjRequest = new JsonObjectRequest
// (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
// MySingleton.getInstance(this).addToRequestQueue(jsObjRequest);
// showData(user);
return null;
}
}
}
The olden times - God activitypublic final class UsersActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
new ListUsers().execute();
}
private final class ListUsers extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
// final SQLiteOpenHelper sqLiteOpenHelper = ...
// JsonObjectRequest jsObjRequest = new JsonObjectRequest
// (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
// MySingleton.getInstance(this).addToRequestQueue(jsObjRequest);
// showData(user);
return null;
}
}
}
The olden times - God activitypublic final class UsersActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
new ListUsers().execute();
}
private final class ListUsers extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
// final SQLiteOpenHelper sqLiteOpenHelper = ...
// JsonObjectRequest jsObjRequest = new JsonObjectRequest
// (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
// MySingleton.getInstance(this).addToRequestQueue(jsObjRequest);
// showData(user);
return null;
}
}
}
NOT testable
The olden times - God activitypublic final class UsersActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
new ListUsers().execute();
}
private final class ListUsers extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
// final SQLiteOpenHelper sqLiteOpenHelper = ...
// JsonObjectRequest jsObjRequest = new JsonObjectRequest
// (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
// MySingleton.getInstance(this).addToRequestQueue(jsObjRequest);
// showData(user);
return null;
}
}
}
NOT testable
Stakeholders?
The olden times - God activitypublic final class UsersActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
new ListUsers().execute();
}
private final class ListUsers extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
// final SQLiteOpenHelper sqLiteOpenHelper = ...
// JsonObjectRequest jsObjRequest = new JsonObjectRequest
// (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
// MySingleton.getInstance(this).addToRequestQueue(jsObjRequest);
// showData(user);
return null;
}
}
}
NOT testable
Stakeholders?
SRP?
The olden times - God activitypublic final class UsersActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
new ListUsers().execute();
}
private final class ListUsers extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... voids) {
// final SQLiteOpenHelper sqLiteOpenHelper = ...
// JsonObjectRequest jsObjRequest = new JsonObjectRequest
// (Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
// MySingleton.getInstance(this).addToRequestQueue(jsObjRequest);
// showData(user);
return null;
}
}
}
NOT testable
Stakeholders?
SRP?
Mixed with
Android!
The olden times - MVP
● Better
The olden times - MVP
● Better
The olden times - MVP
● Better
The olden times - MVP
● Better
SRP
The olden times - MVP
● Better
SRP
Testable-ish
The olden times - MVP
● Better
SRP
Testable-ish
Stakeholders?
The olden times - MVP
● Better
SRP
Testable-ish
Mixed with
Android!
Stakeholders?
The olden times - MVP + Managers
● Sorta OK
Manager
this
Manager
that
The olden times - MVP + Managers
● Sorta OK
Manager
this
Manager
that
SRP - meh ok
The olden times - MVP + Managers
● Sorta OK
Manager
this
Manager
that
SRP - meh ok
Stakeholders
The olden times - MVP + Managers
● Sorta OK
Manager
this
Manager
that
SRP - meh ok
Stakeholders
Mixed with
Android!
The olden times - MVP + Managers
● Sorta OK
Manager
this
Manager
that
SRP - meh ok
Stakeholders
Mixed with
Android!
Testable-ish
Tend to be
HUGE!!!
The Clean Architecture
The Clean Architecture
Onion
The Clean Architecture
Ports and
Adapters
The Clean Architecture
● Dependency rule
● Abstraction
● Communication between layers
Dependency rule
Dependency rule
Dependency rule
Dependency rule
Dependency rule
Abstraction
Abstraction
Abstraction
All dependencies go to the
database
Core of the app
3 tier Clean
All dependencies go
to the business layer
Abstraction
Business is the core of
the app
Communication
Communication
I
Communication
O
Communication
I
O
Communication
I
O
Communication
I
O
Communication
I
O
Communication
I
O
Communication
I
O
Communication
I
Dependency
always pointing
inwards
O
Communication
I
Communication
can go both
inwards and
outwards
O
Adjusted for Android
Adjusted for Android
Entities
Entities
● AKA Domain Objects, Business Objects
● No interaction with the gritty details, no database, no Internet
● Simple business logic constrained to itself or its children
● Immutable
● No persistence methods (stay tuned)
Entities
Example: News app
● Category
● Article
● Commercial
Entities
Example: News app with user subscriptions
● Category
● Article
● Commercial
● User
● Subscription
Use Cases
Use Cases
● AKA Interactors, Business Services
● Small piece of business logic acting on one or more entities
● Must be able to describe its job by using common language (no details)
● Don’t skip use cases
Use Cases
Example: Transfer money to account use case
● Load two accounts
● Do some validation
● If OK transfer money
● Save the changes
Note the simple common language
Repositories
Repositories
● Perform CRUD operations on entities
● Additionally: filtering, aggregate operations, etc…
● Repository is abstract (output port)
● Concrete implementation in outer layers (DAO, API, Cache, Combination)
● Can handle entity’s whole object tree
Presenters
Presenters
● Always have accompanied view
● Gather info and send them to view
● Don’t know concrete view implementation (view as output port)
● But tied to its lifecycle
● User input delegated to presenters
● Usually map entities to viewmodels
Presenters
Example: Screen showing details of an account - abstraction
View
● onTransactionButtonClicked
● onUserItemSelected
● setUserListPanelVisible
● setGenderBoxEnabled
Presenter
● doTransaction
● selectUser
● showUsers
● activateGenderView
Device
Device
● Gritty Android stuff
● NOT Db, Internet or UI - separate component
● Sensors, alarms, notifications, players, etc…
● Define wrappers around Android objects in Device component
● Define interface that wrapper will be implementing in domain component
to serve as an output port
Device
LocationManager
NotificationManager
AlarmManager
MediaPlayer
LocationManagerWrapper
NotificationManagerWrapper
AlarmManagerWrapper
MediaPlayerWrapper
Locations
Notifications
Alarms
Player
Use case 1
Use case 2
Use case 3
Use case 4
Device Domain
DB & API
DB & API
● Also access to the real world
● This time real world are a database and the Internet
● Classes such as SQLiteOpenHelper, DbModels, DAOs, Retrofit interfaces
and services, API models, JSON parsers…
● If you are using database only, DAO can implement a repository
● Inner layers use entities, so you should also return entities -> mappers
UI
UI
● Android classes used for interacting with user via display
● Fragments, Activities, Adapters, Views, Animations, etc…
● Display logic only
Modules
Modules
Domain
Modules
Device
Modules
Data
Modules
UI (app)
Modules
MVP still here
Is it better?
Is it better?
Manager
this
Manager
that
SRP - meh ok
Stakeholders
Mixed with
Android!
Testable-ish
Is it better?
Manager
this
Manager
that
Is it better?
Is it better?
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
UI
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
UI
Domain
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
UI
DataDomain
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
UI
Device
DataDomain
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
UI
Device
Outer worldDataDomain
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
UI
Device
Outer worldDataDomain
SRP
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Not mixed with
Android!
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Not mixed with
Android!
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Not mixed with
Android!
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Testable
Not mixed with
Android!
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Testable
Not mixed with
Android!
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Testable
Not mixed with
Android!
UI designer cares about this
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Testable
Not mixed with
Android!
UI designer cares about this
UX designer cares about this
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Testable
Not mixed with
Android!
UI designer cares about this
UX designer cares about this
BA, QA, PM care about this
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Testable
Not mixed with
Android!
UI designer cares about this
UX designer cares about this
BA, QA, PM care about this
Nobody cares about this
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Testable
Not mixed with
Android!
UI designer cares about this
UX designer cares about this
BA, QA, PM care about this
Backend guys care about
this
Nobody cares about this
Is it better?
Use
case 1
Use
case 2
Use
case 3
...
Repository
Location
Notifications
...
SRP
Testable
Not mixed with
Android!Stakeholders
are satisfied
http://five.agency/about/careers/
Five android architecture

More Related Content

What's hot

Android architecture components
Android architecture components Android architecture components
Android architecture components
azzeddine chenine
 
Stmik bandung
Stmik bandungStmik bandung
Stmik bandung
farid savarudin
 
Java Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development WorkshopJava Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development Workshop
Kasun Dananjaya Delgolla
 
Introduction to Android Development Part 1
Introduction to Android Development Part 1Introduction to Android Development Part 1
Introduction to Android Development Part 1
Kainda Kiniel Daka
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android Development
Can Elmas
 
Introduction to android
Introduction to androidIntroduction to android
Introduction to android
srinivasansoundar
 
Google Android
Google AndroidGoogle Android
Google Android
Michael Angelo Rivera
 
Android application development for TresmaxAsia
Android application development for TresmaxAsiaAndroid application development for TresmaxAsia
Android application development for TresmaxAsia
Michael Angelo Rivera
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android Development
Sander Alberink
 
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
DicodingEvent
 
Android application development workshop day1
Android application development workshop   day1Android application development workshop   day1
Android application development workshop day1
Borhan Otour
 
Deep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture ComponentsDeep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture Components
Somkiat Khitwongwattana
 
Android Development
Android DevelopmentAndroid Development
Android Development
mclougm4
 
Android Presentation
Android PresentationAndroid Presentation
Android Presentation
Bram Vandeputte
 
Android basic principles
Android basic principlesAndroid basic principles
Android basic principles
Henk Laracker
 
Android Framework
Android FrameworkAndroid Framework
Android Framework
CodeAndroid
 
Android application development the basics (2)
Android application development the basics (2)Android application development the basics (2)
Android application development the basics (2)
Aliyu Olalekan
 
Android DevConference - Android Clean Architecture
Android DevConference - Android Clean ArchitectureAndroid DevConference - Android Clean Architecture
Android DevConference - Android Clean Architecture
iMasters
 
Android Applications Development
Android Applications DevelopmentAndroid Applications Development
Android Applications Development
Michael Angelo Rivera
 
Android dev o_auth
Android dev o_authAndroid dev o_auth
Android dev o_auth
lzongren
 

What's hot (20)

Android architecture components
Android architecture components Android architecture components
Android architecture components
 
Stmik bandung
Stmik bandungStmik bandung
Stmik bandung
 
Java Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development WorkshopJava Meetup - 12-03-15 - Android Development Workshop
Java Meetup - 12-03-15 - Android Development Workshop
 
Introduction to Android Development Part 1
Introduction to Android Development Part 1Introduction to Android Development Part 1
Introduction to Android Development Part 1
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android Development
 
Introduction to android
Introduction to androidIntroduction to android
Introduction to android
 
Google Android
Google AndroidGoogle Android
Google Android
 
Android application development for TresmaxAsia
Android application development for TresmaxAsiaAndroid application development for TresmaxAsia
Android application development for TresmaxAsia
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android Development
 
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
Dicoding Developer Coaching #31: Android | Menerapkan Clean Architecture di A...
 
Android application development workshop day1
Android application development workshop   day1Android application development workshop   day1
Android application development workshop day1
 
Deep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture ComponentsDeep Dive Into Repository - Android Architecture Components
Deep Dive Into Repository - Android Architecture Components
 
Android Development
Android DevelopmentAndroid Development
Android Development
 
Android Presentation
Android PresentationAndroid Presentation
Android Presentation
 
Android basic principles
Android basic principlesAndroid basic principles
Android basic principles
 
Android Framework
Android FrameworkAndroid Framework
Android Framework
 
Android application development the basics (2)
Android application development the basics (2)Android application development the basics (2)
Android application development the basics (2)
 
Android DevConference - Android Clean Architecture
Android DevConference - Android Clean ArchitectureAndroid DevConference - Android Clean Architecture
Android DevConference - Android Clean Architecture
 
Android Applications Development
Android Applications DevelopmentAndroid Applications Development
Android Applications Development
 
Android dev o_auth
Android dev o_authAndroid dev o_auth
Android dev o_auth
 

Viewers also liked

Android architecture
Android architectureAndroid architecture
Android architecture
Saurabh Kukreja
 
Android architecture
Android architectureAndroid architecture
Android architecture
Hari Krishna
 
android architecture
android architectureandroid architecture
android architecture
Aashita Gupta
 
Google Io Introduction To Android
Google Io Introduction To AndroidGoogle Io Introduction To Android
Google Io Introduction To Android
Bhavya Siddappa
 
Architecture iOS et Android
Architecture iOS et AndroidArchitecture iOS et Android
Architecture iOS et Android
Hadina RIMTIC
 
iOS App Architecture
iOS App ArchitectureiOS App Architecture
iOS App Architecture
Manjula Jonnalagadda
 
Android Architecture
Android ArchitectureAndroid Architecture
Android Architecture
deepakshare
 
Android Platform Architecture
Android Platform ArchitectureAndroid Platform Architecture
Android Platform Architecture
Naresh Chintalcheru
 
Session 1 - Introduction to iOS 7 and SDK
Session 1 -  Introduction to iOS 7 and SDKSession 1 -  Introduction to iOS 7 and SDK
Session 1 - Introduction to iOS 7 and SDK
Vu Tran Lam
 
iOS Platform & Architecture
iOS Platform & ArchitectureiOS Platform & Architecture
iOS Platform & Architecture
krishguttha
 
Introduction to Android, Architecture & Components
Introduction to  Android, Architecture & ComponentsIntroduction to  Android, Architecture & Components
Introduction to Android, Architecture & Components
Vijay Rastogi
 
Android vs ios System Architecture in OS perspective
Android vs ios System Architecture in OS perspectiveAndroid vs ios System Architecture in OS perspective
Android vs ios System Architecture in OS perspective
Raj Pratim Bhattacharya
 
iOS platform
iOS platformiOS platform
iOS platform
maya_slides
 
Android ppt
Android pptAndroid ppt
Android ppt
srikanth982
 
Android ppt
Android ppt Android ppt
ANDROID
ANDROIDANDROID
ANDROID
Ranjan Som
 
ios basics
ios basicsios basics
ios basics
Muthu Sabarinathan
 
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,..."Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
Yandex
 
iOS Architecture and MVC
iOS Architecture and MVCiOS Architecture and MVC
iOS Architecture and MVC
Marian Ignev
 
Securing android applications
Securing android applicationsSecuring android applications
Securing android applications
Jose Manuel Ortega Candel
 

Viewers also liked (20)

Android architecture
Android architectureAndroid architecture
Android architecture
 
Android architecture
Android architectureAndroid architecture
Android architecture
 
android architecture
android architectureandroid architecture
android architecture
 
Google Io Introduction To Android
Google Io Introduction To AndroidGoogle Io Introduction To Android
Google Io Introduction To Android
 
Architecture iOS et Android
Architecture iOS et AndroidArchitecture iOS et Android
Architecture iOS et Android
 
iOS App Architecture
iOS App ArchitectureiOS App Architecture
iOS App Architecture
 
Android Architecture
Android ArchitectureAndroid Architecture
Android Architecture
 
Android Platform Architecture
Android Platform ArchitectureAndroid Platform Architecture
Android Platform Architecture
 
Session 1 - Introduction to iOS 7 and SDK
Session 1 -  Introduction to iOS 7 and SDKSession 1 -  Introduction to iOS 7 and SDK
Session 1 - Introduction to iOS 7 and SDK
 
iOS Platform & Architecture
iOS Platform & ArchitectureiOS Platform & Architecture
iOS Platform & Architecture
 
Introduction to Android, Architecture & Components
Introduction to  Android, Architecture & ComponentsIntroduction to  Android, Architecture & Components
Introduction to Android, Architecture & Components
 
Android vs ios System Architecture in OS perspective
Android vs ios System Architecture in OS perspectiveAndroid vs ios System Architecture in OS perspective
Android vs ios System Architecture in OS perspective
 
iOS platform
iOS platformiOS platform
iOS platform
 
Android ppt
Android pptAndroid ppt
Android ppt
 
Android ppt
Android ppt Android ppt
Android ppt
 
ANDROID
ANDROIDANDROID
ANDROID
 
ios basics
ios basicsios basics
ios basics
 
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,..."Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
"Architecting and testing large iOS apps: lessons from Facebook". Adam Ernst,...
 
iOS Architecture and MVC
iOS Architecture and MVCiOS Architecture and MVC
iOS Architecture and MVC
 
Securing android applications
Securing android applicationsSecuring android applications
Securing android applications
 

Similar to Five android architecture

From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)
Jose Manuel Pereira Garcia
 
Dori waldman android _course
Dori waldman android _courseDori waldman android _course
Dori waldman android _course
Dori Waldman
 
Lecture #4 activities &amp; fragments
Lecture #4  activities &amp; fragmentsLecture #4  activities &amp; fragments
Lecture #4 activities &amp; fragments
Vitali Pekelis
 
Android Jumpstart Jfokus
Android Jumpstart JfokusAndroid Jumpstart Jfokus
Android Jumpstart Jfokus
Lars Vogel
 
Unit I- ANDROID OVERVIEW.ppt
Unit I- ANDROID OVERVIEW.pptUnit I- ANDROID OVERVIEW.ppt
Unit I- ANDROID OVERVIEW.ppt
dineshkumar periyasamy
 
Quick Intro to Android Development
Quick Intro to Android DevelopmentQuick Intro to Android Development
Quick Intro to Android Development
Jussi Pohjolainen
 
Android101
Android101Android101
Android101
David Marques
 
.Net template solution architecture
.Net template solution architecture.Net template solution architecture
.Net template solution architecture
Diogo Gonçalves da Cunha
 
A Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidA Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on Android
Outware Mobile
 
Advanced android app development
Advanced android app developmentAdvanced android app development
Advanced android app development
Rachmat Wahyu Pramono
 
Android best practices
Android best practicesAndroid best practices
Android best practices
Jose Manuel Ortega Candel
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android Development
Aly Abdelkareem
 
Android development - the basics, MFF UK, 2012
Android development - the basics, MFF UK, 2012Android development - the basics, MFF UK, 2012
Android development - the basics, MFF UK, 2012
Tomáš Kypta
 
Max euro python 2015
Max euro python 2015Max euro python 2015
Max euro python 2015
Carles Bruguera
 
Dori waldman android _course_2
Dori waldman android _course_2Dori waldman android _course_2
Dori waldman android _course_2
Dori Waldman
 
Android
AndroidAndroid
Polyglot persistence with Spring Data
Polyglot persistence with Spring DataPolyglot persistence with Spring Data
Polyglot persistence with Spring Data
Corneil du Plessis
 
Dynamic Population Discovery for Lateral Movement (Using Machine Learning)
Dynamic Population Discovery for Lateral Movement (Using Machine Learning)Dynamic Population Discovery for Lateral Movement (Using Machine Learning)
Dynamic Population Discovery for Lateral Movement (Using Machine Learning)
Rod Soto
 
Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016
Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016
Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016
Loïc Knuchel
 
Human scaling on the front end
Human scaling on the front endHuman scaling on the front end
Human scaling on the front end
Rudy Rigot
 

Similar to Five android architecture (20)

From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)From Legacy to Hexagonal (An Unexpected Android Journey)
From Legacy to Hexagonal (An Unexpected Android Journey)
 
Dori waldman android _course
Dori waldman android _courseDori waldman android _course
Dori waldman android _course
 
Lecture #4 activities &amp; fragments
Lecture #4  activities &amp; fragmentsLecture #4  activities &amp; fragments
Lecture #4 activities &amp; fragments
 
Android Jumpstart Jfokus
Android Jumpstart JfokusAndroid Jumpstart Jfokus
Android Jumpstart Jfokus
 
Unit I- ANDROID OVERVIEW.ppt
Unit I- ANDROID OVERVIEW.pptUnit I- ANDROID OVERVIEW.ppt
Unit I- ANDROID OVERVIEW.ppt
 
Quick Intro to Android Development
Quick Intro to Android DevelopmentQuick Intro to Android Development
Quick Intro to Android Development
 
Android101
Android101Android101
Android101
 
.Net template solution architecture
.Net template solution architecture.Net template solution architecture
.Net template solution architecture
 
A Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on AndroidA Separation of Concerns: Clean Architecture on Android
A Separation of Concerns: Clean Architecture on Android
 
Advanced android app development
Advanced android app developmentAdvanced android app development
Advanced android app development
 
Android best practices
Android best practicesAndroid best practices
Android best practices
 
Introduction to Android Development
Introduction to Android DevelopmentIntroduction to Android Development
Introduction to Android Development
 
Android development - the basics, MFF UK, 2012
Android development - the basics, MFF UK, 2012Android development - the basics, MFF UK, 2012
Android development - the basics, MFF UK, 2012
 
Max euro python 2015
Max euro python 2015Max euro python 2015
Max euro python 2015
 
Dori waldman android _course_2
Dori waldman android _course_2Dori waldman android _course_2
Dori waldman android _course_2
 
Android
AndroidAndroid
Android
 
Polyglot persistence with Spring Data
Polyglot persistence with Spring DataPolyglot persistence with Spring Data
Polyglot persistence with Spring Data
 
Dynamic Population Discovery for Lateral Movement (Using Machine Learning)
Dynamic Population Discovery for Lateral Movement (Using Machine Learning)Dynamic Population Discovery for Lateral Movement (Using Machine Learning)
Dynamic Population Discovery for Lateral Movement (Using Machine Learning)
 
Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016
Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016
Ionic2, les développeurs web à l'assaut du mobile, BDX I/O le 21/10/2016
 
Human scaling on the front end
Human scaling on the front endHuman scaling on the front end
Human scaling on the front end
 

Recently uploaded

Embedded machine learning-based road conditions and driving behavior monitoring
Embedded machine learning-based road conditions and driving behavior monitoringEmbedded machine learning-based road conditions and driving behavior monitoring
Embedded machine learning-based road conditions and driving behavior monitoring
IJECEIAES
 
Recycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part IIIRecycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part III
Aditya Rajan Patra
 
CSM Cloud Service Management Presentarion
CSM Cloud Service Management PresentarionCSM Cloud Service Management Presentarion
CSM Cloud Service Management Presentarion
rpskprasana
 
ML Based Model for NIDS MSc Updated Presentation.v2.pptx
ML Based Model for NIDS MSc Updated Presentation.v2.pptxML Based Model for NIDS MSc Updated Presentation.v2.pptx
ML Based Model for NIDS MSc Updated Presentation.v2.pptx
JamalHussainArman
 
Modelagem de um CSTR com reação endotermica.pdf
Modelagem de um CSTR com reação endotermica.pdfModelagem de um CSTR com reação endotermica.pdf
Modelagem de um CSTR com reação endotermica.pdf
camseq
 
Presentation of IEEE Slovenia CIS (Computational Intelligence Society) Chapte...
Presentation of IEEE Slovenia CIS (Computational Intelligence Society) Chapte...Presentation of IEEE Slovenia CIS (Computational Intelligence Society) Chapte...
Presentation of IEEE Slovenia CIS (Computational Intelligence Society) Chapte...
University of Maribor
 
A review on techniques and modelling methodologies used for checking electrom...
A review on techniques and modelling methodologies used for checking electrom...A review on techniques and modelling methodologies used for checking electrom...
A review on techniques and modelling methodologies used for checking electrom...
nooriasukmaningtyas
 
132/33KV substation case study Presentation
132/33KV substation case study Presentation132/33KV substation case study Presentation
132/33KV substation case study Presentation
kandramariana6
 
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
insn4465
 
Casting-Defect-inSlab continuous casting.pdf
Casting-Defect-inSlab continuous casting.pdfCasting-Defect-inSlab continuous casting.pdf
Casting-Defect-inSlab continuous casting.pdf
zubairahmad848137
 
Redefining brain tumor segmentation: a cutting-edge convolutional neural netw...
Redefining brain tumor segmentation: a cutting-edge convolutional neural netw...Redefining brain tumor segmentation: a cutting-edge convolutional neural netw...
Redefining brain tumor segmentation: a cutting-edge convolutional neural netw...
IJECEIAES
 
TIME DIVISION MULTIPLEXING TECHNIQUE FOR COMMUNICATION SYSTEM
TIME DIVISION MULTIPLEXING TECHNIQUE FOR COMMUNICATION SYSTEMTIME DIVISION MULTIPLEXING TECHNIQUE FOR COMMUNICATION SYSTEM
TIME DIVISION MULTIPLEXING TECHNIQUE FOR COMMUNICATION SYSTEM
HODECEDSIET
 
ISPM 15 Heat Treated Wood Stamps and why your shipping must have one
ISPM 15 Heat Treated Wood Stamps and why your shipping must have oneISPM 15 Heat Treated Wood Stamps and why your shipping must have one
ISPM 15 Heat Treated Wood Stamps and why your shipping must have one
Las Vegas Warehouse
 
Literature Review Basics and Understanding Reference Management.pptx
Literature Review Basics and Understanding Reference Management.pptxLiterature Review Basics and Understanding Reference Management.pptx
Literature Review Basics and Understanding Reference Management.pptx
Dr Ramhari Poudyal
 
Recycled Concrete Aggregate in Construction Part II
Recycled Concrete Aggregate in Construction Part IIRecycled Concrete Aggregate in Construction Part II
Recycled Concrete Aggregate in Construction Part II
Aditya Rajan Patra
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Christina Lin
 
Textile Chemical Processing and Dyeing.pdf
Textile Chemical Processing and Dyeing.pdfTextile Chemical Processing and Dyeing.pdf
Textile Chemical Processing and Dyeing.pdf
NazakatAliKhoso2
 
Heat Resistant Concrete Presentation ppt
Heat Resistant Concrete Presentation pptHeat Resistant Concrete Presentation ppt
Heat Resistant Concrete Presentation ppt
mamunhossenbd75
 
Iron and Steel Technology Roadmap - Towards more sustainable steelmaking.pdf
Iron and Steel Technology Roadmap - Towards more sustainable steelmaking.pdfIron and Steel Technology Roadmap - Towards more sustainable steelmaking.pdf
Iron and Steel Technology Roadmap - Towards more sustainable steelmaking.pdf
RadiNasr
 
basic-wireline-operations-course-mahmoud-f-radwan.pdf
basic-wireline-operations-course-mahmoud-f-radwan.pdfbasic-wireline-operations-course-mahmoud-f-radwan.pdf
basic-wireline-operations-course-mahmoud-f-radwan.pdf
NidhalKahouli2
 

Recently uploaded (20)

Embedded machine learning-based road conditions and driving behavior monitoring
Embedded machine learning-based road conditions and driving behavior monitoringEmbedded machine learning-based road conditions and driving behavior monitoring
Embedded machine learning-based road conditions and driving behavior monitoring
 
Recycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part IIIRecycled Concrete Aggregate in Construction Part III
Recycled Concrete Aggregate in Construction Part III
 
CSM Cloud Service Management Presentarion
CSM Cloud Service Management PresentarionCSM Cloud Service Management Presentarion
CSM Cloud Service Management Presentarion
 
ML Based Model for NIDS MSc Updated Presentation.v2.pptx
ML Based Model for NIDS MSc Updated Presentation.v2.pptxML Based Model for NIDS MSc Updated Presentation.v2.pptx
ML Based Model for NIDS MSc Updated Presentation.v2.pptx
 
Modelagem de um CSTR com reação endotermica.pdf
Modelagem de um CSTR com reação endotermica.pdfModelagem de um CSTR com reação endotermica.pdf
Modelagem de um CSTR com reação endotermica.pdf
 
Presentation of IEEE Slovenia CIS (Computational Intelligence Society) Chapte...
Presentation of IEEE Slovenia CIS (Computational Intelligence Society) Chapte...Presentation of IEEE Slovenia CIS (Computational Intelligence Society) Chapte...
Presentation of IEEE Slovenia CIS (Computational Intelligence Society) Chapte...
 
A review on techniques and modelling methodologies used for checking electrom...
A review on techniques and modelling methodologies used for checking electrom...A review on techniques and modelling methodologies used for checking electrom...
A review on techniques and modelling methodologies used for checking electrom...
 
132/33KV substation case study Presentation
132/33KV substation case study Presentation132/33KV substation case study Presentation
132/33KV substation case study Presentation
 
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
哪里办理(csu毕业证书)查尔斯特大学毕业证硕士学历原版一模一样
 
Casting-Defect-inSlab continuous casting.pdf
Casting-Defect-inSlab continuous casting.pdfCasting-Defect-inSlab continuous casting.pdf
Casting-Defect-inSlab continuous casting.pdf
 
Redefining brain tumor segmentation: a cutting-edge convolutional neural netw...
Redefining brain tumor segmentation: a cutting-edge convolutional neural netw...Redefining brain tumor segmentation: a cutting-edge convolutional neural netw...
Redefining brain tumor segmentation: a cutting-edge convolutional neural netw...
 
TIME DIVISION MULTIPLEXING TECHNIQUE FOR COMMUNICATION SYSTEM
TIME DIVISION MULTIPLEXING TECHNIQUE FOR COMMUNICATION SYSTEMTIME DIVISION MULTIPLEXING TECHNIQUE FOR COMMUNICATION SYSTEM
TIME DIVISION MULTIPLEXING TECHNIQUE FOR COMMUNICATION SYSTEM
 
ISPM 15 Heat Treated Wood Stamps and why your shipping must have one
ISPM 15 Heat Treated Wood Stamps and why your shipping must have oneISPM 15 Heat Treated Wood Stamps and why your shipping must have one
ISPM 15 Heat Treated Wood Stamps and why your shipping must have one
 
Literature Review Basics and Understanding Reference Management.pptx
Literature Review Basics and Understanding Reference Management.pptxLiterature Review Basics and Understanding Reference Management.pptx
Literature Review Basics and Understanding Reference Management.pptx
 
Recycled Concrete Aggregate in Construction Part II
Recycled Concrete Aggregate in Construction Part IIRecycled Concrete Aggregate in Construction Part II
Recycled Concrete Aggregate in Construction Part II
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
 
Textile Chemical Processing and Dyeing.pdf
Textile Chemical Processing and Dyeing.pdfTextile Chemical Processing and Dyeing.pdf
Textile Chemical Processing and Dyeing.pdf
 
Heat Resistant Concrete Presentation ppt
Heat Resistant Concrete Presentation pptHeat Resistant Concrete Presentation ppt
Heat Resistant Concrete Presentation ppt
 
Iron and Steel Technology Roadmap - Towards more sustainable steelmaking.pdf
Iron and Steel Technology Roadmap - Towards more sustainable steelmaking.pdfIron and Steel Technology Roadmap - Towards more sustainable steelmaking.pdf
Iron and Steel Technology Roadmap - Towards more sustainable steelmaking.pdf
 
basic-wireline-operations-course-mahmoud-f-radwan.pdf
basic-wireline-operations-course-mahmoud-f-radwan.pdfbasic-wireline-operations-course-mahmoud-f-radwan.pdf
basic-wireline-operations-course-mahmoud-f-radwan.pdf
 

Five android architecture

  • 1. Intro to Five Architecture 29.09.2016@Five #IzSveSnagetomislav.homan@fiveminutes.eu Or zero to clean…. Tomislav Homan, Five
  • 2. Overview ● Earlier fails ● General Clean Architecture ● Clean Adjusted for Android ● Is it better? ● No code, just philosophy
  • 3. Software Architecture ● “Intellectually graspable” abstraction of a complex system (wiki) ● (which helps us plan, design and construct software)
  • 4. Software Architecture ● “Intellectually graspable” abstraction of a complex system (wiki) ● Multitude of stakeholders ● Separation of concerns - one reason to change ● Run away from the real world (Android, DB, Internet) ● Testability ● SRP + Testability + … = Maintainability, Scalability, etc...
  • 5. The olden times - God activitypublic final class UsersActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //... new ListUsers().execute(); } private final class ListUsers extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... voids) { // final SQLiteOpenHelper sqLiteOpenHelper = ... // JsonObjectRequest jsObjRequest = new JsonObjectRequest // (Request.Method.GET, url, null, new Response.Listener<JSONObject>() { // MySingleton.getInstance(this).addToRequestQueue(jsObjRequest); // showData(user); return null; } } }
  • 6. The olden times - God activitypublic final class UsersActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //... new ListUsers().execute(); } private final class ListUsers extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... voids) { // final SQLiteOpenHelper sqLiteOpenHelper = ... // JsonObjectRequest jsObjRequest = new JsonObjectRequest // (Request.Method.GET, url, null, new Response.Listener<JSONObject>() { // MySingleton.getInstance(this).addToRequestQueue(jsObjRequest); // showData(user); return null; } } }
  • 7. The olden times - God activitypublic final class UsersActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //... new ListUsers().execute(); } private final class ListUsers extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... voids) { // final SQLiteOpenHelper sqLiteOpenHelper = ... // JsonObjectRequest jsObjRequest = new JsonObjectRequest // (Request.Method.GET, url, null, new Response.Listener<JSONObject>() { // MySingleton.getInstance(this).addToRequestQueue(jsObjRequest); // showData(user); return null; } } } NOT testable
  • 8. The olden times - God activitypublic final class UsersActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //... new ListUsers().execute(); } private final class ListUsers extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... voids) { // final SQLiteOpenHelper sqLiteOpenHelper = ... // JsonObjectRequest jsObjRequest = new JsonObjectRequest // (Request.Method.GET, url, null, new Response.Listener<JSONObject>() { // MySingleton.getInstance(this).addToRequestQueue(jsObjRequest); // showData(user); return null; } } } NOT testable Stakeholders?
  • 9. The olden times - God activitypublic final class UsersActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //... new ListUsers().execute(); } private final class ListUsers extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... voids) { // final SQLiteOpenHelper sqLiteOpenHelper = ... // JsonObjectRequest jsObjRequest = new JsonObjectRequest // (Request.Method.GET, url, null, new Response.Listener<JSONObject>() { // MySingleton.getInstance(this).addToRequestQueue(jsObjRequest); // showData(user); return null; } } } NOT testable Stakeholders? SRP?
  • 10. The olden times - God activitypublic final class UsersActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //... new ListUsers().execute(); } private final class ListUsers extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... voids) { // final SQLiteOpenHelper sqLiteOpenHelper = ... // JsonObjectRequest jsObjRequest = new JsonObjectRequest // (Request.Method.GET, url, null, new Response.Listener<JSONObject>() { // MySingleton.getInstance(this).addToRequestQueue(jsObjRequest); // showData(user); return null; } } } NOT testable Stakeholders? SRP? Mixed with Android!
  • 11. The olden times - MVP ● Better
  • 12. The olden times - MVP ● Better
  • 13. The olden times - MVP ● Better
  • 14. The olden times - MVP ● Better SRP
  • 15. The olden times - MVP ● Better SRP Testable-ish
  • 16. The olden times - MVP ● Better SRP Testable-ish Stakeholders?
  • 17. The olden times - MVP ● Better SRP Testable-ish Mixed with Android! Stakeholders?
  • 18. The olden times - MVP + Managers ● Sorta OK Manager this Manager that
  • 19. The olden times - MVP + Managers ● Sorta OK Manager this Manager that SRP - meh ok
  • 20. The olden times - MVP + Managers ● Sorta OK Manager this Manager that SRP - meh ok Stakeholders
  • 21. The olden times - MVP + Managers ● Sorta OK Manager this Manager that SRP - meh ok Stakeholders Mixed with Android!
  • 22. The olden times - MVP + Managers ● Sorta OK Manager this Manager that SRP - meh ok Stakeholders Mixed with Android! Testable-ish Tend to be HUGE!!!
  • 26. The Clean Architecture ● Dependency rule ● Abstraction ● Communication between layers
  • 35. All dependencies go to the database Core of the app 3 tier Clean All dependencies go to the business layer Abstraction Business is the core of the app
  • 50. Entities ● AKA Domain Objects, Business Objects ● No interaction with the gritty details, no database, no Internet ● Simple business logic constrained to itself or its children ● Immutable ● No persistence methods (stay tuned)
  • 51. Entities Example: News app ● Category ● Article ● Commercial
  • 52. Entities Example: News app with user subscriptions ● Category ● Article ● Commercial ● User ● Subscription
  • 54. Use Cases ● AKA Interactors, Business Services ● Small piece of business logic acting on one or more entities ● Must be able to describe its job by using common language (no details) ● Don’t skip use cases
  • 55. Use Cases Example: Transfer money to account use case ● Load two accounts ● Do some validation ● If OK transfer money ● Save the changes Note the simple common language
  • 57. Repositories ● Perform CRUD operations on entities ● Additionally: filtering, aggregate operations, etc… ● Repository is abstract (output port) ● Concrete implementation in outer layers (DAO, API, Cache, Combination) ● Can handle entity’s whole object tree
  • 59. Presenters ● Always have accompanied view ● Gather info and send them to view ● Don’t know concrete view implementation (view as output port) ● But tied to its lifecycle ● User input delegated to presenters ● Usually map entities to viewmodels
  • 60. Presenters Example: Screen showing details of an account - abstraction View ● onTransactionButtonClicked ● onUserItemSelected ● setUserListPanelVisible ● setGenderBoxEnabled Presenter ● doTransaction ● selectUser ● showUsers ● activateGenderView
  • 62. Device ● Gritty Android stuff ● NOT Db, Internet or UI - separate component ● Sensors, alarms, notifications, players, etc… ● Define wrappers around Android objects in Device component ● Define interface that wrapper will be implementing in domain component to serve as an output port
  • 65. DB & API ● Also access to the real world ● This time real world are a database and the Internet ● Classes such as SQLiteOpenHelper, DbModels, DAOs, Retrofit interfaces and services, API models, JSON parsers… ● If you are using database only, DAO can implement a repository ● Inner layers use entities, so you should also return entities -> mappers
  • 66. UI
  • 67. UI ● Android classes used for interacting with user via display ● Fragments, Activities, Adapters, Views, Animations, etc… ● Display logic only
  • 75. Is it better? Manager this Manager that SRP - meh ok Stakeholders Mixed with Android! Testable-ish
  • 79. Is it better? Use case 1 Use case 2 Use case 3 ...
  • 80. Is it better? Use case 1 Use case 2 Use case 3 ... Repository
  • 81. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ...
  • 82. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... UI
  • 83. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... UI Domain
  • 84. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... UI DataDomain
  • 85. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... UI Device DataDomain
  • 86. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... UI Device Outer worldDataDomain
  • 87. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... UI Device Outer worldDataDomain SRP
  • 88. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP
  • 89. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP
  • 90. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP Not mixed with Android!
  • 91. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP Not mixed with Android!
  • 92. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP Not mixed with Android!
  • 93. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP Testable Not mixed with Android!
  • 94. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP Testable Not mixed with Android!
  • 95. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP Testable Not mixed with Android! UI designer cares about this
  • 96. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP Testable Not mixed with Android! UI designer cares about this UX designer cares about this
  • 97. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP Testable Not mixed with Android! UI designer cares about this UX designer cares about this BA, QA, PM care about this
  • 98. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP Testable Not mixed with Android! UI designer cares about this UX designer cares about this BA, QA, PM care about this Nobody cares about this
  • 99. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP Testable Not mixed with Android! UI designer cares about this UX designer cares about this BA, QA, PM care about this Backend guys care about this Nobody cares about this
  • 100. Is it better? Use case 1 Use case 2 Use case 3 ... Repository Location Notifications ... SRP Testable Not mixed with Android!Stakeholders are satisfied
  • 101.