SlideShare uma empresa Scribd logo
1 de 80
Mobile
Architecture
From The Patterns
To The Deployment
MVVM
It’s All In The
Implementation
Details
Model
View
ViewModel
DataModelView ViewModel
1 … *
Android Classes?
Static Methods?
Android Classes?
Static Methods?
Providers
context.getString(id);
public class ResourceProvider {
Context context;
ResourceProvider(Context context){
this.context = context;
}
}
public class ResourceProvider {
Context context;
ResourceProvider(Context context){
this.context = context;
}
}
String getString(@StringRes int id) {
return
}
context.getString(id);
FirebaseRemoteConfig.getInstance() .getString(key);
class RemoteConfigProvider {
FirebaseRemoteConfig remoteConfig;
}
RemoteConfigProvider() {
remoteConfig =
}
FirebaseRemoteConfig.getInstance()
class RemoteConfigProvider {
FirebaseRemoteConfig remoteConfig;
}
String getString(String key) {
return remoteConfig.getString(key);
}
RemoteConfigProvider() {
remoteConfig =
}
FirebaseRemoteConfig.getInstance()
DataModel
View DataModelViewModel
Network
Database
SharedPreferences
Articles
Articles
Articles
DataModel
Category
Category
Categories
DataModel
Articles
DataModel
class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
}
class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
}
Observable<List<Article>> getOrfetchTopNewsArticles() {
}
class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
}
Observable<List<Article>> getOrfetchTopNewsArticles() {
}
return localDataSource
.getTopNews()
class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
}
Observable<List<Article>> getOrfetchTopNewsArticles() {
}
return localDataSource
.getTopNews()
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
}
Observable<List<Article>> getOrfetchTopNewsArticles() {
}
return localDataSource
.getTopNews()
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
.compose(new ArticleAgeFilterTransformer(
filter))
class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
}
Observable<List<Article>> getOrfetchTopNewsArticles() {
}
return localDataSource
.getTopNews()
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
.compose(new ArticleAgeFilterTransformer(
filter))
localDataSource
.getTopNews()
class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
}
Observable<List<Article>> getOrfetchTopNewsArticles() {
}
return localDataSource
.getTopNews()
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
.compose(new ArticleAgeFilterTransformer(
filter))
localDataSource
.getTopNews()
Observable<List<Article>>
class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
}
Observable<List<Article>> getOrfetchTopNewsArticles() {
}
return localDataSource
.getTopNews()
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
.compose(new ArticleAgeFilterTransformer(
filter))
.getTopNews()
class ArticlesDataModel {
RemoteDataSource remoteDataSource;
LocalDataSource localDataSource;
}
Observable<List<Article>> getOrfetchTopNewsArticles() {
}
return localDataSource
.getTopNews()
.flatMap(articles -> articles.isEmpty()
? remoteDataSource.getTopNews()
: Observable.just(articles));
.compose(new ArticleAgeFilterTransformer(
filter))
getOrfetchTopNewsArticles
.getTopNews()
HomeView
Article Teaser
View
Article Teaser
View
ArticleTeaser
ViewModel
Articles
DataModel
Article Teaser
View
ArticleTeaser
ViewModel
Database
Articles
DataModel
Article Teaser
View
ArticleTeaser
ViewModel
Database
New Article
Articles
DataModel
Article Teaser
View
ArticleTeaser
ViewModel
Articles
DataModel
New Article
Database
Article Teaser
View
ArticleTeaser
ViewModel
getOrfetchTopNewsArticles
ArticleTeaser
ViewModel
New Article
Database
Articles
DataModel
Article Teaser
View
getTopNewsArticle
Article Teaser
View
New Article
Database
Articles
DataModel
ArticleTeaser
ViewModel
DataModel uses the Repository pattern
One DataModel per business model
DataModel drives the data flow
View
ViewModel
Article Teaser
View
<LinearLayout>
<…ArticleTeaserView
… />
</LinearLayout>
class ArticleTeaserView extends View{
ArticleTeaserView(Context context){
...
onInject();
}
}
class ArticleTeaserView extends View{
}
new ArticleTeaserViewModel()
ArticleTeaserView(Context context){
...
onInject();
}
class ArticleTeaserView extends View{
}
void onAttachedToWindow(){
bind();
}
class ArticleTeaserView extends View{
}
void onAttachedToWindow(){
bind();
}
void bind(){
subscription.add(
viewModel.getTopNewsArticle()
.subscribeOn(…)
.observeOn(…)
.subscribe(this::showArticle,
error -> Timber.e(error, “Error ...”);
}
class ArticleTeaserView extends View{
}
void onDettachedFromWindow(){
subscription.clear();
}
class ArticleTeaserView extends View{
}
void onDettachedFromWindow(){
subscription.clear();
}
viewModel.dispose();
Lifecycle of the ViewModel depends on the lifecycle of the View
Only the View has a reference to the corresponding ViewModel
View is declared in the XML
Only other native android classes know about the View
Model-View-ViewModel
Lists
TopNewsStream
View
class TopNewsStreamViewModel {
}
class TopNewsStreamViewModel {
}
Observable<TopNewsPages>
getTopNewsPages(){
…
}
TopNewsStream
View
class TopNewsStreamViewModel {
}
@AutoValue
abstract class TopNewsPages {
List<Displayable> displayables();
int position();
}
Observable<TopNewsPages>
getTopNewsPages(){
…
}
TopNewsStream
View
class TopNewsStreamView extends Fragment {
}
@Inject
TopNewsStreamViewModel viewModel;
void onResume(){
bind();
}
void onPause(){
unbind();
}
class TopNewsStreamView extends Fragment{
}
class TopNewsStreamView extends Fragment{
}
void bind(){
subscription.add(
viewModel.getTopNewsPages()
.subscribe(pages -> setupPages(pages))
}
class TopNewsStreamView extends Fragment{
}
void bind(){
subscription.add(
viewModel.getTopNewsPages()
.subscribe(pages -> setupPages(pages))
}
void setupPages(TopNewsPages pages){
// based on pages.displayables()
// update RecyclerView.Adapter
// using DiffUtil.calculateDiff
}
void bind(){
subscription.add(
viewModel.getTopNewsPages()
.subscribe(pages -> setupPages(pages))
}
void setupPages(TopNewsPages pages){
// based on pages.displayables()
// update RecyclerView.Adapter
// using DiffUtil.calculateDiff
}
// based on pages.position()
// update position
class TopNewsStreamView extends Fragment{
}
class DisplayablesRecyclerViewAdapter
extends RecyclerView.Adapter<BoundViewHolder> {
}
class DisplayablesRecyclerViewAdapter
extends RecyclerView.Adapter<BoundViewHolder> {
}
onCreateItemView(ViewGroup parent,
int viewType){
// create View
// create the ViewModel for the View
}
Open Article
Open Article
Share Article
Open Article
Share Article
Label should
disappear after 5sec
class TopNewsArticleViewModel {
void openArticle(){
…
}
void share(){
…
}
Observable<Boolean>
isNewLabelVisible(){
…
}
}
ViewModel creates and emits the Model of the View
View subscribes to the emissions of the Model
View updates the RecyclerView.Adapter
In Adapter.onCreateItemView the RecylerView’s item and
the corresponding ViewModel are created.
Open Article
no ViewModel
Open Article
class TopNewsStreamViewModel {
Observable<List<Displayable>> getDisplayables(){
}
}
class TopNewsStreamViewModel {
Observable<List<Displayable>> getDisplayables(){
}
@AutoValue
abstract class Displayable (){
Article article();
}
}
@AutoValue
abstract class Displayable (){
Article article();
}
Action0 onClickAction();
}
class TopNewsStreamViewModel {
Observable<List<Displayable>> getDisplayables(){
}
Displayable create(Article article, Action0 action){
…
}
@AutoValue
abstract class Displayable (){
Article article();
}
Action0 onClickAction();
}
class TopNewsStreamViewModel {
Observable<List<Displayable>> getDisplayables(){
}
class TopNewsStreamViewModel {
Observable<List<Displayable>> getDisplayables(){
}
return dataModel.getTopNewsArticles()
.flatMap(article ->
createDisplayable(article))
...
}
class TopNewsStreamViewModel {
Observable<List<Displayable>> getDisplayables(){
}
return dataModel.getTopNewsArticles()
.flatMap(article ->
createDisplayable(article))
...
}
Displayable createDisplayable(Article article){
return Displayable.create(article,
new Action0() {
@Override
public void call() {
// handle item click
}
}
class TopNewsStreamViewModel {
Observable<List<Displayable>> getDisplayables(){
}
return dataModel.getTopNewsArticles()
.flatMap(article ->
createDisplayable(article))
...
}
Displayable createDisplayable(Article article){
return Displayable.create(article,
new Action0() {
@Override
public void call() {
// handle item click
}
}
class TopNewsViewHolder implements
RecyclerView.ViewHolder {
}
class TopNewsViewHolder implements
RecyclerView.ViewHolder {
}
TextView title;
…
class TopNewsViewHolder implements
RecyclerView.ViewHolder {
}
TextView title;
…
void bindItem(Displayable displayable){
title.setText(displayable.article().getTitle())
}
class TopNewsViewHolder implements
RecyclerView.ViewHolder {
}
TextView title;
…
void bindItem(Displayable displayable){
title.setText(displayable.article().getTitle())
}
view.setOnClickListener(
v -> displayable.onClickAction().call())
Define an Action in the View’s Model
Bind the Model to the View via the RecyclerView.ViewHolder
Trigger the Action
Action is handled by the ViewModel
MVVM
It’s All In The
Implementation
Details

Mais conteúdo relacionado

Mais procurados

Reactive Model-View-ViewModel Architecture
Reactive Model-View-ViewModel ArchitectureReactive Model-View-ViewModel Architecture
Reactive Model-View-ViewModel ArchitectureGyuwon Yi
 
Anton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 lightAnton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 lightMichael Pustovit
 
Vaadin JPAContainer
Vaadin JPAContainerVaadin JPAContainer
Vaadin JPAContainercmkandemir
 
Converting Db Schema Into Uml Classes
Converting Db Schema Into Uml ClassesConverting Db Schema Into Uml Classes
Converting Db Schema Into Uml ClassesKaniska Mandal
 
Spring mvc my Faviourite Slide
Spring mvc my Faviourite SlideSpring mvc my Faviourite Slide
Spring mvc my Faviourite SlideDaniel Adenew
 
What is the difference between struts 1 vs struts 2
What is the difference between struts 1 vs struts 2What is the difference between struts 1 vs struts 2
What is the difference between struts 1 vs struts 2Santosh Singh Paliwal
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafMasatoshi Tada
 
Oleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring DataArturs Drozdovs
 
Code to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern ApplicationsCode to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern ApplicationsCaleb Jenkins
 

Mais procurados (16)

Reactive Model-View-ViewModel Architecture
Reactive Model-View-ViewModel ArchitectureReactive Model-View-ViewModel Architecture
Reactive Model-View-ViewModel Architecture
 
Anton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 lightAnton Minashkin Dagger 2 light
Anton Minashkin Dagger 2 light
 
Simple Jdbc With Spring 2.5
Simple Jdbc With Spring 2.5Simple Jdbc With Spring 2.5
Simple Jdbc With Spring 2.5
 
Vaadin JPAContainer
Vaadin JPAContainerVaadin JPAContainer
Vaadin JPAContainer
 
Converting Db Schema Into Uml Classes
Converting Db Schema Into Uml ClassesConverting Db Schema Into Uml Classes
Converting Db Schema Into Uml Classes
 
Spring mvc my Faviourite Slide
Spring mvc my Faviourite SlideSpring mvc my Faviourite Slide
Spring mvc my Faviourite Slide
 
TY.BSc.IT Java QB U1
TY.BSc.IT Java QB U1TY.BSc.IT Java QB U1
TY.BSc.IT Java QB U1
 
Lecture17
Lecture17Lecture17
Lecture17
 
What is the difference between struts 1 vs struts 2
What is the difference between struts 1 vs struts 2What is the difference between struts 1 vs struts 2
What is the difference between struts 1 vs struts 2
 
Getting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with ThymeleafGetting start Java EE Action-Based MVC with Thymeleaf
Getting start Java EE Action-Based MVC with Thymeleaf
 
Java Persistence API
Java Persistence APIJava Persistence API
Java Persistence API
 
Oleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoCOleksandr Valetskyy - DI vs. IoC
Oleksandr Valetskyy - DI vs. IoC
 
JDBC - JPA - Spring Data
JDBC - JPA - Spring DataJDBC - JPA - Spring Data
JDBC - JPA - Spring Data
 
Code to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern ApplicationsCode to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern Applications
 
Introduction to Struts 2
Introduction to Struts 2Introduction to Struts 2
Introduction to Struts 2
 
Spring 3 to 4
Spring 3 to 4Spring 3 to 4
Spring 3 to 4
 

Semelhante a MVM - It's all in the (Implementation) Details

Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureAlexey Buzdin
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android InfrastructureC.T.Co
 
"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил Анохин"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил АнохинFwdays
 
Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"Fwdays
 
Architecture components - IT Talk
Architecture components - IT TalkArchitecture components - IT Talk
Architecture components - IT TalkConstantine Mars
 
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...Inhacking
 
Data binding в массы!
Data binding в массы!Data binding в массы!
Data binding в массы!Artjoker
 
Survive the lifecycle
Survive the lifecycleSurvive the lifecycle
Survive the lifecycleSimon Joecks
 
Saindo da zona de conforto… resolvi aprender android
Saindo da zona de conforto… resolvi aprender androidSaindo da zona de conforto… resolvi aprender android
Saindo da zona de conforto… resolvi aprender androidDaniel Baccin
 
Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015 Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015 Mario Jorge Pereira
 
Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6Michael Plöd
 
Binding business data to vaadin components
Binding business data to vaadin componentsBinding business data to vaadin components
Binding business data to vaadin componentsPeter Lehto
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotationjavatwo2011
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM patternNAVER Engineering
 
Skroutz Android MVP and Adapter Delegates presentation
Skroutz Android MVP and Adapter Delegates  presentationSkroutz Android MVP and Adapter Delegates  presentation
Skroutz Android MVP and Adapter Delegates presentationgmetal
 
Тарас Олексин - Sculpt! Your! Tests!
Тарас Олексин  - Sculpt! Your! Tests!Тарас Олексин  - Sculpt! Your! Tests!
Тарас Олексин - Sculpt! Your! Tests!DataArt
 
Struts 2 + Spring
Struts 2 + SpringStruts 2 + Spring
Struts 2 + SpringBryan Hsueh
 

Semelhante a MVM - It's all in the (Implementation) Details (20)

Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
Overview of Android Infrastructure
Overview of Android InfrastructureOverview of Android Infrastructure
Overview of Android Infrastructure
 
"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил Анохин"Android Data Binding в массы" Михаил Анохин
"Android Data Binding в массы" Михаил Анохин
 
List adapter with multiple objects
List adapter with multiple objectsList adapter with multiple objects
List adapter with multiple objects
 
Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"Михаил Анохин "Data binding 2.0"
Михаил Анохин "Data binding 2.0"
 
Architecture components - IT Talk
Architecture components - IT TalkArchitecture components - IT Talk
Architecture components - IT Talk
 
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...SE2016 Android Mikle Anokhin "Speed up application development with data bind...
SE2016 Android Mikle Anokhin "Speed up application development with data bind...
 
Data binding в массы!
Data binding в массы!Data binding в массы!
Data binding в массы!
 
Android development
Android developmentAndroid development
Android development
 
Survive the lifecycle
Survive the lifecycleSurvive the lifecycle
Survive the lifecycle
 
Saindo da zona de conforto… resolvi aprender android
Saindo da zona de conforto… resolvi aprender androidSaindo da zona de conforto… resolvi aprender android
Saindo da zona de conforto… resolvi aprender android
 
Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015 Android por onde começar? Mini Curso Erbase 2015
Android por onde começar? Mini Curso Erbase 2015
 
Spring Web MVC
Spring Web MVCSpring Web MVC
Spring Web MVC
 
Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6Integrating Wicket with Java EE 6
Integrating Wicket with Java EE 6
 
Binding business data to vaadin components
Binding business data to vaadin componentsBinding business data to vaadin components
Binding business data to vaadin components
 
比XML更好用的Java Annotation
比XML更好用的Java Annotation比XML更好用的Java Annotation
比XML更好用的Java Annotation
 
[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern[22]Efficient and Testable MVVM pattern
[22]Efficient and Testable MVVM pattern
 
Skroutz Android MVP and Adapter Delegates presentation
Skroutz Android MVP and Adapter Delegates  presentationSkroutz Android MVP and Adapter Delegates  presentation
Skroutz Android MVP and Adapter Delegates presentation
 
Тарас Олексин - Sculpt! Your! Tests!
Тарас Олексин  - Sculpt! Your! Tests!Тарас Олексин  - Sculpt! Your! Tests!
Тарас Олексин - Sculpt! Your! Tests!
 
Struts 2 + Spring
Struts 2 + SpringStruts 2 + Spring
Struts 2 + Spring
 

Mais de Florina Muntenescu

Tech Talks: You Do Have Something To Say! Why and How To Start
Tech Talks: You Do Have Something To Say! Why and How To Start Tech Talks: You Do Have Something To Say! Why and How To Start
Tech Talks: You Do Have Something To Say! Why and How To Start Florina Muntenescu
 
Optimising The Performance Of VectorDrawables
Optimising The Performance Of VectorDrawablesOptimising The Performance Of VectorDrawables
Optimising The Performance Of VectorDrawablesFlorina Muntenescu
 
A Journey Through MV Wonderland
A Journey Through MV WonderlandA Journey Through MV Wonderland
A Journey Through MV WonderlandFlorina Muntenescu
 
Model-View-ViewModel and RxJava
Model-View-ViewModel and RxJavaModel-View-ViewModel and RxJava
Model-View-ViewModel and RxJavaFlorina Muntenescu
 
MVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mixMVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mixFlorina Muntenescu
 

Mais de Florina Muntenescu (8)

Tech Talks: You Do Have Something To Say! Why and How To Start
Tech Talks: You Do Have Something To Say! Why and How To Start Tech Talks: You Do Have Something To Say! Why and How To Start
Tech Talks: You Do Have Something To Say! Why and How To Start
 
Code Learn Share
Code Learn ShareCode Learn Share
Code Learn Share
 
Optimising The Performance Of VectorDrawables
Optimising The Performance Of VectorDrawablesOptimising The Performance Of VectorDrawables
Optimising The Performance Of VectorDrawables
 
Building a reactive mindset
Building a reactive mindsetBuilding a reactive mindset
Building a reactive mindset
 
A Journey Through MV Wonderland
A Journey Through MV WonderlandA Journey Through MV Wonderland
A Journey Through MV Wonderland
 
The ABCs of RxJava
The ABCs of RxJavaThe ABCs of RxJava
The ABCs of RxJava
 
Model-View-ViewModel and RxJava
Model-View-ViewModel and RxJavaModel-View-ViewModel and RxJava
Model-View-ViewModel and RxJava
 
MVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mixMVVM and RxJava – the perfect mix
MVVM and RxJava – the perfect mix
 

Último

%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...masabamasaba
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...masabamasaba
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburgmasabamasaba
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension AidPhilip Schwarz
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 

Último (20)

%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
WSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go PlatformlessWSO2CON2024 - It's time to go Platformless
WSO2CON2024 - It's time to go Platformless
 
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
WSO2CON 2024 - Navigating API Complexity: REST, GraphQL, gRPC, Websocket, Web...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Toronto Psychic Readings, Attraction spells,Brin...
 
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 

MVM - It's all in the (Implementation) Details