SlideShare ist ein Scribd-Unternehmen logo
1 von 85
Downloaden Sie, um offline zu lesen
A Separation of Concerns
Kamal Kamal Mohamed
Android Developer, //TODO Find Better Title @ Outware Mobile
Ryan Hodgman
Official Despiser of Utils Classes @ Outware Mobile
Clean Architecture on Android
18/09/2015 - YOW Connected 2015
Why are we here?
To share with you our journey in
applying Clean Architecture to an
Android project
...and get some valuable feedback
Premise
Our own interpretation
Under development
Not a silver bullet
Iterating on it on a day to day basis
Best suited for medium-big projects
Multiple possible implementations
What are our goals as developers?
Easy to refactor on volatile projects
Maintainable
What are our goals as developers?
Easy to refactor on volatile projects
Maintainable
Be confident that the code is reliable
Testable
What are our goals as developers?
Easy to refactor on volatile projects
Maintainable
Be confident that the code is reliable
Testable
Can increase scope without requiring a rework
Scalable
What are our goals as developers?
Easy to refactor on volatile projects
Maintainable
Be confident that the code is reliable
Testable
Reduce the difficulty of future development efforts
Readable
Can increase scope without requiring a rework
Scalable
Introduction to Clean
What is Clean Architecture?
Robert Martin’s original depiction of Clean Architecture https://blog.
8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html
The Dependency Rule
Source code dependencies can only point inwards
How many layers?
(The answer is three)
Separation of Concerns
Presentation Logic
Defines how to display visual information to the user
Examples:
● Organize screen layout
● Format text
● Enable user input
Separation of Concerns
Business Logic
Implements the business requirements of the application
Examples:
● Verify user authorization
● Choose data to be displayed
● Determine if additional user input is required
Separation of Concerns
Data Logic
Stores and retrieves data to achieve the business requirements
Examples:
● Make an API call
● Query a local database
● Access the local filesystem
Architectural Diagram
Image Source: Lucasfilm Ltd. All Rights Reserved
Architectural Diagram
Domain Layer
Domain Layer
Entity
Represents a business object that concerns the application
Least likely to change when shifting requirements
Responsibilities
Entity
Represents a business object that concerns the application
Least likely to change when shifting requirements
● Model the relationships with real-world
objects / concepts
● Encapsulate the properties required by
the application’s business logic
Responsibilities Interactions
Entity
Represents a business object that concerns the application
Least likely to change when shifting requirements
● Model the relationships with real-world
objects / concepts
● Encapsulate the properties required by
the application’s business logic
● May be used directly by all layers of the
application
● Likely that they may be mapped from
data sources or to presentable view
models
Entity
Entity
Properties
Entity
Entity-specific logic
Use Case
Contains the business logic related to a specific use case
Can be run and canceled
Responsibilities
Use Case
Contains the business logic related to a specific use case
Can be run and canceled
● Execute a piece of business logic
● Define a Callback to provide results
● Inform the Callback of the result
● Interact with the data layer
Responsibilities Interactions
Use Case
Contains the business logic related to a specific use case
Can be run and canceled
● Execute a piece of business logic
● Define a Callback to provide results
● Inform the Callback of the result
● Interact with the data layer
Use Case
Use Case
Callback
Repository
Callback
Notifies
Uses
Repository
Implements
Use Case
Use Case
One or more Repository objects
Use Case
May be run and cancelled
Use Case
Contains business logic
Use Case
Defines interactions
Repository
Asynchronous interface to abstract data access to a specific set of data from
the data layer
Responsibilities
Repository
Asynchronous interface to abstract data access to a specific set of data from
the data layer
● Provide methods to store and retrieve
data of a specific type
● Define Callback interfaces to return the
results of each operation
Responsibilities Interactions
Repository
Asynchronous interface to abstract data access to a specific set of data from
the data layer
● Provide methods to store and retrieve
data of a specific type
● Define Callback interfaces to return the
results of each operation
Repository
Data
Manager
Use Case
ImplementsUses
Repository
Repository
Asynchronous
Repository
Callback definition
A Brief Note on Test-Driven-Development
Presentation Layer
Presentation Layer
Model-View-Presenter
Presenter
View Surface Activity
Presentation
Domain
Fragment
View
Implements
Uses
Uses
Uses
Presenter
Implements presentation logic by directing UI changes and handling user
input
Responsibilities
Presenter
Implements presentation logic by directing UI changes and handling user
input
● Direct UI changes
● Handle user triggered UI events
● Create and trigger Use Case objects
● Define a View Surface interface
Responsibilities Interactions
Presenter
Implements presentation logic by directing UI changes and handling user
input
● Direct UI changes
● Handle user triggered UI events
● Create and trigger Use Case objects
● Define a View Surface interface
Presenter
View Surface
Use Case
Callback
Uses
Triggers
Use Case
Implements
Presenter
Presenter
Systems Surfaces and Use Cases
Presenter
Lifecycle events
Presenter
UI event management
View Surface
Abstracts away the implementation of the UI logic, and is typically implemented
by a View, Activity or Fragment
Responsibilities
View Surface
Abstracts away the implementation of the UI logic, and is typically implemented
by a View, Activity or Fragment
● Screen layout
● Animations / transitions
● Propagate UI events to the Presenter
● Navigation
Responsibilities Interactions
View Surface
Abstracts away the implementation of the UI logic, and is typically implemented
by a View, Activity or Fragment
● Screen layout
● Animations / transitions
● Propagate UI events to the Presenter
● Navigation
Activity
Presenter
Presenter
View Surface
InformsImplements
View Surface
View Surface
Navigation
View Surface
UI information
View Surface
UI state
System Surface
Abstracts away the implementation of various system functionalities
Responsibilities
System Surface
Abstracts away the implementation of various system functionalities
● Provide functionality specific to the OS /
device
● Gracefully fail in the event of missing
functionality
Responsibilities Interactions
System Surface
Abstracts away the implementation of various system functionalities
● Provide functionality specific to the OS /
device
● Gracefully fail in the event of missing
functionality
System
Surface
Used by
Presenter
System Surface
System Surface
Android system dependencies
System Surface
System-specific implementation
Data Layer
Data Layer
Data Manager
Implements a single Repository interface to handle all the data sources
required for a specific set of data
Responsibilities
Data Manager
Implements a single Repository interface to handle all the data sources
required for a specific set of data
● Provide access to a specific set of data
● Make request on a data source in the
form of a Client
● Handle a cache when required
Responsibilities Interactions
Data Manager
Implements a single Repository interface to handle all the data sources
required for a specific set of data
● Provide access to a specific set of data
● Make request on a data source in the
form of a Client
● Handle a cache when required
Data
Manager
Repository
Callback
Repository
NotifiesImplements
Client
Uses
Client
Encapsulates a particular source of data and exposes an abstracted interface to
the Data Managers
Responsibilities
Client
Encapsulates a particular source of data and exposes an abstracted interface to
the Data Managers
● Make Database queries
● Manage an API connection
● Access Local Storage
● Map data results to domain Entities
Responsibilities Interactions
Client
Encapsulates a particular source of data and exposes an abstracted interface to
the Data Managers
● Make Database queries
● Manage an API connection
● Access Local Storage
● Map data results to domain Entities
Client
Data
Manager
Used by
Mapper
Uses
Handles
Data
Source
Mapper
Converts a data object (API or DB response) to a domain Entity
Responsibilities
Mapper
Converts a data object (API or DB response) to a domain Entity
● Transform data into domain-convenient
Entities
Responsibilities Interactions
Mapper
Converts a data object (API or DB response) to a domain Entity
● Transform data into domain-convenient
Entities
Mapper
Data Object
Entity
Conclusions
Pros
Workflow improvements
Code readability
Testability
No more 1000+ line Activity classes
Isolated business logic
Possibility to work on separate layers in parallel
Cons
Hierarchy implementation
Developer onboarding
Interfaces
Increased ramp-up time for new developers
Interfaces, interfaces, ...
Implementing a feature requires working across all of the layers
Further thoughts
Dagger 2! Can help a lot with keeping the layers clean
Dependency injection
Further thoughts
Dagger 2! Can help a lot with keeping the layers clean
Dependency injection
Where should we split tasks onto a worker thread?
Thread management
Further thoughts
Dagger 2! Can help a lot with keeping the layers clean
Dependency injection
Where should we split tasks onto a worker thread?
Thread management
RxJava! Helps to reduce callbacks and make flows clearer
Functional programming
Further thoughts
Dagger 2! Can help a lot with keeping the layers clean
Dependency injection
Where should we split tasks onto a worker thread?
Thread management
RxJava! Helps to reduce callbacks and make flows clearer
Functional programming
May be useful to model a stateful user flow through the application
User narratives
Next thing you can do!
Consider the separation between data, domain, and
presentation logic in one of your projects
References
The Clean Architecture [Uncle Bob]
https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html
Architecting Android…The clean way? [Fernando Cejas]
http://fernandocejas.com/2014/09/03/architecting-android-the-clean-way/
Sample Project [Ryan and Kamal]
https://github.com/outware-mobile/android-clean-architecture
Contact details
Kamal Kamal Mohamed
kamal.kamalmohamed@outware.com.au
Ryan Hodgman
ryan.hodgman@outware.com.au

Weitere ähnliche Inhalte

Was ist angesagt?

Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean ArchitectureMattia Battiston
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design PrinciplesAndreas Enbohm
 
Clean architecture
Clean architectureClean architecture
Clean architectureandbed
 
Refactoring for Domain Driven Design
Refactoring for Domain Driven DesignRefactoring for Domain Driven Design
Refactoring for Domain Driven DesignDavid Berliner
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignYoung-Ho Cho
 
Clean architecture - Protecting the Domain
Clean architecture - Protecting the DomainClean architecture - Protecting the Domain
Clean architecture - Protecting the DomainVictor Rentea
 
Clean architecture: Android
Clean architecture: AndroidClean architecture: Android
Clean architecture: Androidintive
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
Clean Architecture Essentials - Stockholm Software Craftsmanship
Clean Architecture Essentials - Stockholm Software CraftsmanshipClean Architecture Essentials - Stockholm Software Craftsmanship
Clean Architecture Essentials - Stockholm Software CraftsmanshipIvan Paulovich
 
Micro Frontends Architecture - Jitendra kumawat (Guavus)
Micro Frontends Architecture - Jitendra kumawat (Guavus)Micro Frontends Architecture - Jitendra kumawat (Guavus)
Micro Frontends Architecture - Jitendra kumawat (Guavus)Tech Triveni
 
React Js Simplified
React Js SimplifiedReact Js Simplified
React Js SimplifiedSunil Yadav
 
Single Responsibility Principle
Single Responsibility PrincipleSingle Responsibility Principle
Single Responsibility PrincipleEyal Golan
 
Tips about hibernate with spring data jpa
Tips about hibernate with spring data jpaTips about hibernate with spring data jpa
Tips about hibernate with spring data jpaThiago Dos Santos Hora
 

Was ist angesagt? (20)

Real Life Clean Architecture
Real Life Clean ArchitectureReal Life Clean Architecture
Real Life Clean Architecture
 
SOLID Design Principles
SOLID Design PrinciplesSOLID Design Principles
SOLID Design Principles
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Refactoring for Domain Driven Design
Refactoring for Domain Driven DesignRefactoring for Domain Driven Design
Refactoring for Domain Driven Design
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Clean architecture - Protecting the Domain
Clean architecture - Protecting the DomainClean architecture - Protecting the Domain
Clean architecture - Protecting the Domain
 
Micro Frontends
Micro FrontendsMicro Frontends
Micro Frontends
 
Clean architecture: Android
Clean architecture: AndroidClean architecture: Android
Clean architecture: Android
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID Principles
 
Clean Architecture Essentials - Stockholm Software Craftsmanship
Clean Architecture Essentials - Stockholm Software CraftsmanshipClean Architecture Essentials - Stockholm Software Craftsmanship
Clean Architecture Essentials - Stockholm Software Craftsmanship
 
Clean Code
Clean CodeClean Code
Clean Code
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Micro Frontends Architecture - Jitendra kumawat (Guavus)
Micro Frontends Architecture - Jitendra kumawat (Guavus)Micro Frontends Architecture - Jitendra kumawat (Guavus)
Micro Frontends Architecture - Jitendra kumawat (Guavus)
 
React Js Simplified
React Js SimplifiedReact Js Simplified
React Js Simplified
 
React for Beginners
React for BeginnersReact for Beginners
React for Beginners
 
Single Responsibility Principle
Single Responsibility PrincipleSingle Responsibility Principle
Single Responsibility Principle
 
Clean code
Clean codeClean code
Clean code
 
Tips about hibernate with spring data jpa
Tips about hibernate with spring data jpaTips about hibernate with spring data jpa
Tips about hibernate with spring data jpa
 
DDD Introduction
DDD IntroductionDDD Introduction
DDD Introduction
 

Andere mochten auch

Android Clean Architecture for Dummies
Android Clean Architecture for DummiesAndroid Clean Architecture for Dummies
Android Clean Architecture for DummiesKengo Suzuki
 
Clean architecture on android
Clean architecture on androidClean architecture on android
Clean architecture on androidBenjamin Cheng
 
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitectureTomoaki Imai
 
Lightning Talk - Clean Architecture and Design
Lightning Talk - Clean Architecture and DesignLightning Talk - Clean Architecture and Design
Lightning Talk - Clean Architecture and DesignDeivison Sporteman
 
World-Class Testing Development Pipeline for Android
 World-Class Testing Development Pipeline for Android World-Class Testing Development Pipeline for Android
World-Class Testing Development Pipeline for AndroidPedro Vicente Gómez Sánchez
 
Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~Ken William
 
Design pattern in android
Design pattern in androidDesign pattern in android
Design pattern in androidJay Kumarr
 
Onion Architecture
Onion ArchitectureOnion Architecture
Onion Architecturematthidinger
 
Android DevConference - Android Clean Architecture
Android DevConference - Android Clean ArchitectureAndroid DevConference - Android Clean Architecture
Android DevConference - Android Clean ArchitectureiMasters
 
Clean Architecture by Andrzej Bednarz
Clean Architecture by Andrzej BednarzClean Architecture by Andrzej Bednarz
Clean Architecture by Andrzej BednarzNetworkedAssets
 
Android DevConference - Refactoring for RxJava
Android DevConference - Refactoring for RxJavaAndroid DevConference - Refactoring for RxJava
Android DevConference - Refactoring for RxJavaiMasters
 
Moxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магииMoxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магииYuri Shmakov
 

Andere mochten auch (20)

Android Clean Architecture for Dummies
Android Clean Architecture for DummiesAndroid Clean Architecture for Dummies
Android Clean Architecture for Dummies
 
Clean architecture on android
Clean architecture on androidClean architecture on android
Clean architecture on android
 
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitecture
 
Karumi Dojo: Kata Maxibon
Karumi Dojo: Kata MaxibonKarumi Dojo: Kata Maxibon
Karumi Dojo: Kata Maxibon
 
Lightning Talk - Clean Architecture and Design
Lightning Talk - Clean Architecture and DesignLightning Talk - Clean Architecture and Design
Lightning Talk - Clean Architecture and Design
 
World-Class Testing Development Pipeline for Android
 World-Class Testing Development Pipeline for Android World-Class Testing Development Pipeline for Android
World-Class Testing Development Pipeline for Android
 
Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~Is Activity God? ~ The MVP Architecture ~
Is Activity God? ~ The MVP Architecture ~
 
Design pattern in android
Design pattern in androidDesign pattern in android
Design pattern in android
 
Effective Android UI - English
Effective Android UI - EnglishEffective Android UI - English
Effective Android UI - English
 
Karumi Dojo - String Calculator Kata
Karumi Dojo - String Calculator KataKarumi Dojo - String Calculator Kata
Karumi Dojo - String Calculator Kata
 
Kata Contacts
Kata ContactsKata Contacts
Kata Contacts
 
Onion Architecture
Onion ArchitectureOnion Architecture
Onion Architecture
 
Android DevConference - Android Clean Architecture
Android DevConference - Android Clean ArchitectureAndroid DevConference - Android Clean Architecture
Android DevConference - Android Clean Architecture
 
Dependency injection on Android
Dependency injection on AndroidDependency injection on Android
Dependency injection on Android
 
Android development
Android developmentAndroid development
Android development
 
Clean Architecture by Andrzej Bednarz
Clean Architecture by Andrzej BednarzClean Architecture by Andrzej Bednarz
Clean Architecture by Andrzej Bednarz
 
Android DevConference - Refactoring for RxJava
Android DevConference - Refactoring for RxJavaAndroid DevConference - Refactoring for RxJava
Android DevConference - Refactoring for RxJava
 
Designing a participatory sensing game with children
Designing a participatory sensing game with childrenDesigning a participatory sensing game with children
Designing a participatory sensing game with children
 
The Good Developer - Spanish
The Good Developer - SpanishThe Good Developer - Spanish
The Good Developer - Spanish
 
Moxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магииMoxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магии
 

Ähnlich wie Separation of Concerns in Clean Architecture on Android

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
 
RedisConf17 - Dynomite - Making Non-distributed Databases Distributed
RedisConf17 - Dynomite - Making Non-distributed Databases DistributedRedisConf17 - Dynomite - Making Non-distributed Databases Distributed
RedisConf17 - Dynomite - Making Non-distributed Databases DistributedRedis Labs
 
Crafted Design - ITAKE 2014
Crafted Design - ITAKE 2014Crafted Design - ITAKE 2014
Crafted Design - ITAKE 2014Sandro Mancuso
 
Deconstructing Monoliths with Domain Driven Design
Deconstructing Monoliths with Domain Driven DesignDeconstructing Monoliths with Domain Driven Design
Deconstructing Monoliths with Domain Driven DesignVMware Tanzu
 
Crafted Design - Sandro Mancuso
Crafted Design - Sandro MancusoCrafted Design - Sandro Mancuso
Crafted Design - Sandro MancusoJAXLondon2014
 
Twelve Factor - Designing for Change
Twelve Factor - Designing for ChangeTwelve Factor - Designing for Change
Twelve Factor - Designing for ChangeEric Wyles
 
Advanced web application architecture - Talk
Advanced web application architecture - TalkAdvanced web application architecture - Talk
Advanced web application architecture - TalkMatthias Noback
 
Effects, Coeffects & Subscriptions: a pit of success for SPAs
Effects, Coeffects & Subscriptions: a pit of success for SPAsEffects, Coeffects & Subscriptions: a pit of success for SPAs
Effects, Coeffects & Subscriptions: a pit of success for SPAsManuel Rivero
 
Shaping serverless architecture with domain driven design patterns
Shaping serverless architecture with domain driven design patternsShaping serverless architecture with domain driven design patterns
Shaping serverless architecture with domain driven design patternsShimon Tolts
 
Shaping serverless architecture with domain driven design patterns
Shaping serverless architecture with domain driven design patternsShaping serverless architecture with domain driven design patterns
Shaping serverless architecture with domain driven design patternsAsher Sterkin
 
Five android architecture
Five android architectureFive android architecture
Five android architectureTomislav Homan
 
Crafted Design - LJC World Tour Mash Up 2014
Crafted Design - LJC World Tour Mash Up 2014Crafted Design - LJC World Tour Mash Up 2014
Crafted Design - LJC World Tour Mash Up 2014Sandro Mancuso
 
Framework Engineering
Framework EngineeringFramework Engineering
Framework EngineeringYoungSu Son
 
Scaling mobile dev teams
Scaling mobile dev teams Scaling mobile dev teams
Scaling mobile dev teams Priyank Gupta
 
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18Manuel Rivero
 
Software Architecture - All you need to know
Software Architecture - All you need to knowSoftware Architecture - All you need to know
Software Architecture - All you need to knowVincent Composieux
 

Ähnlich wie Separation of Concerns in Clean Architecture on Android (20)

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...
 
A CQRS Journey
A CQRS JourneyA CQRS Journey
A CQRS Journey
 
RedisConf17 - Dynomite - Making Non-distributed Databases Distributed
RedisConf17 - Dynomite - Making Non-distributed Databases DistributedRedisConf17 - Dynomite - Making Non-distributed Databases Distributed
RedisConf17 - Dynomite - Making Non-distributed Databases Distributed
 
Crafted Design - ITAKE 2014
Crafted Design - ITAKE 2014Crafted Design - ITAKE 2014
Crafted Design - ITAKE 2014
 
Deconstructing Monoliths with Domain Driven Design
Deconstructing Monoliths with Domain Driven DesignDeconstructing Monoliths with Domain Driven Design
Deconstructing Monoliths with Domain Driven Design
 
Crafted Design - Sandro Mancuso
Crafted Design - Sandro MancusoCrafted Design - Sandro Mancuso
Crafted Design - Sandro Mancuso
 
Twelve Factor - Designing for Change
Twelve Factor - Designing for ChangeTwelve Factor - Designing for Change
Twelve Factor - Designing for Change
 
Advanced web application architecture - Talk
Advanced web application architecture - TalkAdvanced web application architecture - Talk
Advanced web application architecture - Talk
 
Dynomite @ RedisConf 2017
Dynomite @ RedisConf 2017Dynomite @ RedisConf 2017
Dynomite @ RedisConf 2017
 
Effects, Coeffects & Subscriptions: a pit of success for SPAs
Effects, Coeffects & Subscriptions: a pit of success for SPAsEffects, Coeffects & Subscriptions: a pit of success for SPAs
Effects, Coeffects & Subscriptions: a pit of success for SPAs
 
Shaping serverless architecture with domain driven design patterns
Shaping serverless architecture with domain driven design patternsShaping serverless architecture with domain driven design patterns
Shaping serverless architecture with domain driven design patterns
 
Shaping serverless architecture with domain driven design patterns
Shaping serverless architecture with domain driven design patternsShaping serverless architecture with domain driven design patterns
Shaping serverless architecture with domain driven design patterns
 
Android meetup
Android meetupAndroid meetup
Android meetup
 
Five android architecture
Five android architectureFive android architecture
Five android architecture
 
Crafted Design - LJC World Tour Mash Up 2014
Crafted Design - LJC World Tour Mash Up 2014Crafted Design - LJC World Tour Mash Up 2014
Crafted Design - LJC World Tour Mash Up 2014
 
Framework Engineering
Framework EngineeringFramework Engineering
Framework Engineering
 
Scaling mobile dev teams
Scaling mobile dev teams Scaling mobile dev teams
Scaling mobile dev teams
 
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18
Effects, coeffects & subscriptions: a pit of success for SPAs Socracan18
 
Evolutionary Design Solid
Evolutionary Design SolidEvolutionary Design Solid
Evolutionary Design Solid
 
Software Architecture - All you need to know
Software Architecture - All you need to knowSoftware Architecture - All you need to know
Software Architecture - All you need to know
 

Kürzlich hochgeladen

CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceanilsa9823
 
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost LoverPowerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost LoverPsychicRuben LoveSpells
 
9892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x79892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x7Pooja Nehwal
 
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCRFULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCRnishacall1
 
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Pooja Nehwal
 
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceanilsa9823
 
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort ServiceDelhi Call girls
 

Kürzlich hochgeladen (7)

CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
 
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost LoverPowerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
 
9892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x79892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x7
 
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCRFULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
 
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
 
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
 
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
 

Separation of Concerns in Clean Architecture on Android