SlideShare a Scribd company logo
@fabioCollini
Fabio Collini
Architectures in the
Compose World
Architecture
State
UI
state event
https://developer.android.com/jetpack/compose/architecture
https://developer.android.com/jetpack/compose/architecture
State
UI
state event
State
UI
state event
State
Composable
state event
ViewModel
Composable
state event
ViewModel
Composable
UseCase
state event
ViewModel
Composable
UseCase
Repository
state event
ViewModel
Composable
UseCase
Repository
state event
source of truth
ViewModel
Composable
UseCase
Repository
state event
state event
source of truth
ViewModel
Composable
UseCase
Repository
state event
state event
state event
source of truth
MVVM / MVI
MVVM
/
MVI
Both MVVM and MVI are
unidirectional data
fl
ow
architectures
MVVM
The ViewModel accepts
events and exposes the
state
MVI
The state is a single
immutable object
MVI
The state is a single
immutable object


The events are managed
using a
fl
ow
UI = f(state)
UI = f(state)
always
UI = f(state)
always


most of the times
https://medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150
https://proandroiddev.com/android-singleliveevent-redux-with-kotlin-
fl
ow-b755c70bb055
SingleLiveEvent


SharedFlow


Channel


State + LaunchedEffect
SingleLiveEvent


SharedFlow


Channel


State + LaunchedEffect


Lots of edge cases :(


Not an of
fi
cial solution yet
State
MVI
The state is a single
immutable object
data class State(

val notes: List<Note>,

/
/
.
.
.


)
data class State(

val notes: List<Note>,

/
/
.
.
.


)

data class Note(

val id: Int,

val title: String,

val checked: Boolean

)
@Composable

fun Notes(state: State, onCheckedChange: (Note)
-
>
Unit) {

/
/
.
.
.


}
Notes(

state = state,

onCheckedChange = { noteToToggle
-
>


state = state.copy(

notes = state.notes

.map { note
-
>


if (note.id
=
=
noteToToggle.id) {

note.copy(checked = !note.checked)

} else {

note

}

}

)

}

)
Notes(

state = state,

onCheckedChange = { noteToToggle
-
>


state = state.copy(

notes = state.notes

.map { note
-
>


if (note.id
=
=
noteToToggle.id) {

note.copy(checked = !note.checked)

} else {

note

}

}

)

}

)
data class Note(

val id: Int,

val title: String,

val checked: Boolean

)
data class Note(

val id: Int,

val title: String,

var checked: Boolean

)_
data class Note(

val id: Int,

val title: String,

var checked: Boolean

)_

Notes(

state = state,

onCheckedChange = { noteToToggle
-
>


state = state.copy(

notes = state.notes

.map { note
-
>


if (note.id
=
=
noteToToggle.id) {

note.copy(checked = !note.checked)

} else {

note

}

}

)

}

)
data class Note(

val id: Int,

val title: String,

var checked: Boolean

)

Notes(

state = state,

onCheckedChange = { noteToToggle
-
>


noteToToggle.checked = !noteToToggle.checked

}

)
Not
so
easy…
https://developer.android.com/reference/kotlin/androidx/compose/runtime/Immutable
https://developer.android.com/reference/kotlin/androidx/compose/runtime/Stable
Architectures in the compose world
Architectures in the compose world
data class Note(

val id: Int,

val title: String,

var checked: Boolean

)

Notes(

state = state,

onCheckedChange = { noteToToggle
-
>


noteToToggle.checked = !noteToToggle.checked

}

)
data class Note(

val id: Int,

val title: String,

) {

var checked: Boolean by mutableStateOf(false)

}

Notes(

state = state,

onCheckedChange = { noteToToggle
-
>


noteToToggle.checked = !noteToToggle.checked

}

)
Composable
Xml
fi
les Composables
Xml
fi
les


Custom Views
Composables
Xml
fi
les


Custom Views


Fragments
Composables
Xml
fi
les


Custom Views


Fragments


Activities
Composables
Xml
fi
les Composables
Xml
fi
les
Composables


with


state hoisting
Custom Views Composables
Custom Views
Composables


with


remember /


rememberSavable
Fragments


Activities
Composables
Fragments


Activities
Screens


with


ViewModel
Fragments


Activities
Screens


with


ViewModel
Composables


with


remember /


rememberSavable
Custom Views
Composables


with


state hoisting
Xml
fi
les
Screen
class MyFragment : Fragment() {

override fun onCreateView(
.
.
.
) = 

ComposeView(requireContext()).apply {

setContent {

MyScreen()

}

}

}
class MyFragment : Fragment() {

override fun onCreateView(
.
.
.
) = 

ComposeView(requireContext()).apply {

setContent {

MyScreen()

}
_
_


}_

}

@Composable

fun MyScreen() {

/
/
.
.
.


}
class MyFragment : Fragment() {

override fun onCreateView(
.
.
.
) = 

ComposeView(requireContext()).apply {

viewLifecycleOwner.lifecycleScope.launch {

/
/
.
.
.


}

setContent {

MyScreen()

}
_
_


}_

}

@Composable

fun MyScreen() {

/
/
.
.
.


}
class MyFragment : Fragment() {

override fun onCreateView(
.
.
.
) = 

ComposeView(requireContext()).apply {

viewLifecycleOwner.lifecycleScope.launch {

/
/
.
.
.


}

setContent {

MyScreen()

}

}

}

@Composable

fun MyScreen() {

/
/
.
.
.


val scope = rememberCoroutineScope()

}
class MyFragment : Fragment() {

override fun onCreateView(
.
.
.
) = 

ComposeView(requireContext()).apply {

viewLifecycleOwner.lifecycleScope.launch {

/
/
.
.
.


}

setContent {

MyScreen()

}

}

}

@Composable

fun MyScreen() {

/
/
.
.
.


val scope = rememberCoroutineScope()

LaunchedEffect("
.
.
.
") {

/
/
.
.
.


}

}
https://developer.android.com/jetpack/compose/lifecycle
https://developer.android.com/jetpack/compose/lifecycle
@Singleton

class MyClass @Inject constructor() {

/
/
.
.
.


}
@Singleton

class MyClass @Inject constructor() {

/
/
.
.
.


}

@AndroidEntryPoint

class MyFragment : Fragment() {

@Inject

lateinit var myInstance: MyClass

/
/
.
.
.


}
@Singleton

class MyClass @Inject constructor() {

/
/
.
.
.


}
@Singleton

class MyClass @Inject constructor() {

/
/
.
.
.


}

@InstallIn(SingletonComponent
:
:
class)

@EntryPoint

interface MyEntryPoint {

val myInstance: MyClass

}
@Composable

inline fun <reified T : Any> rememberSingletonEntryPoint(): T {

val context = LocalContext.current

return remember {

EntryPointAccessors.fromApplication(context, T
:
:
class.java)

}

}
@Singleton

class MyClass @Inject constructor() {

/
/
.
.
.


}

@InstallIn(SingletonComponent
:
:
class)

@EntryPoint

interface MyEntryPoint {

val myInstance: MyClass

}
@Singleton

class MyClass @Inject constructor() {

/
/
.
.
.


}

@InstallIn(SingletonComponent
:
:
class)

@EntryPoint

interface MyEntryPoint {

val myInstance: MyClass

}

@Composable

fun MyScreen() {

val entryPoint = rememberSingletonEntryPoint<MyEntryPoint>()

val myInstance = entryPoint.myInstance

}
@ActivityScoped

class MyClass @Inject constructor() {

/
/
.
.
.


}

@InstallIn(ActivityComponent
:
:
class)

@EntryPoint

interface MyEntryPoint {

val myInstance: MyClass

}

@Composable

fun MyScreen() {

val entryPoint = rememberActivityEntryPoint<MyEntryPoint>()

val myInstance = entryPoint.myInstance

}
@ComposableScoped

class MyClass @Inject constructor() {

/
/
.
.
.


}

@InstallIn(ActivityComponent
:
:
class)

@EntryPoint

interface MyEntryPoint {

val myInstance: MyClass

}

@Composable

fun MyScreen() {

val entryPoint = rememberActivityEntryPoint<MyEntryPoint>()

val myInstance = entryPoint.myInstance

}
@ComposableScoped
@Scope

annotation class ComposableScoped
@Scope

annotation class ComposableScoped

@ComposableScoped

@DefineComponent(parent = ActivityComponent
:
:
class)

interface ComposableComponent_
@Scope

annotation class ComposableScoped

@ComposableScoped

@DefineComponent(parent = ActivityComponent
:
:
class)

interface ComposableComponent_

@DefineComponent.Builder

interface ComposableComponentBuilder {

fun build(): ComposableComponent

}
@Scope

annotation class ComposableScoped

@ComposableScoped

@DefineComponent(parent = ActivityComponent
:
:
class)

interface ComposableComponent_

@DefineComponent.Builder

interface ComposableComponentBuilder {

fun build(): ComposableComponent

}

@EntryPoint

@InstallIn(ActivityComponent
:
:
class)

interface ComposableComponentBuilderEntryPoint {

val componentBuilder: ComposableComponentBuilder

}_
@Composable

inline fun <reified T : Any> rememberComposableEntryPoint(): T {

val context = LocalContext.current

return remember {

val entryPoint = EntryPointAccessors.fromActivity(

context.getActivity(), ComposableComponentBuilderEntryPoint
:
:
class.java

)

EntryPoints.get(entryPoint.componentBuilder.build(), T
:
:
class.java)

}

}
@ComposableScoped

class MyClass @Inject constructor() {

/
/
.
.
.


}
@ComposableScoped

class MyClass @Inject constructor() {

/
/
.
.
.


}

@InstallIn(ComposableComponent
:
:
class)

@EntryPoint

interface MyEntryPoint {

val myInstance: MyClass

}
@ComposableScoped

class MyClass @Inject constructor() {

/
/
.
.
.


}

@InstallIn(ComposableComponent
:
:
class)

@EntryPoint

interface MyEntryPoint {

val myInstance: MyClass

}

@Composable

fun MyScreen() {

val entryPoint = rememberComposableEntryPoint<MyEntryPoint>()

val myInstance = entryPoint.myInstance

}
ViewModel
Are ViewModels


necessary


(or useful)


using Compose?
https://www.youtube.com/watch?v=rmv2ug-wW4U
val navController = rememberNavController()

NavHost(navController = navController) {

}_
val navController = rememberNavController()

NavHost(navController = navController, startDestination = "home") {

composable("home") {

HomeScreen()

}

}_
val navController = rememberNavController()

NavHost(navController = navController, startDestination = "home") {

composable("home") {

HomeScreen()

}

composable(

route = "detail/{id}",

arguments = listOf(navArgument("id") { type = IntType })

) {

DetailScreen()

}

}_
val navController = rememberNavController()

NavHost(navController = navController, startDestination = "home") {

composable("home") {

HomeScreen(onClick = { navController.navigate("detail/123") })

}

composable(

route = "detail/{id}",

arguments = listOf(navArgument("id") { type = IntType })

) {

DetailScreen()

}

}_
class DetailViewModel constructor(

) : ViewModel() {

}_
@HiltViewModel

class DetailViewModel @Inject constructor(

private val myUseCase: MyUseCase,

) : ViewModel() {

}_
@HiltViewModel

class DetailViewModel @Inject constructor(

private val myUseCase: MyUseCase,

savedStateHandle: SavedStateHandle

) : ViewModel() {

init {

val id = savedStateHandle.get<Int>("id")

}

}_
@HiltViewModel

class DetailViewModel @Inject constructor(

private val myUseCase: MyUseCase,

savedStateHandle: SavedStateHandle

) : ViewModel() {

init {

val id = savedStateHandle.get<Int>("id")

viewModelScope.launch {

myUseCase.suspendMethod(id)

}

}

}_
@HiltViewModel

class DetailViewModel @Inject constructor(

private val myUseCase: MyUseCase,

savedStateHandle: SavedStateHandle

) : ViewModel() {

var state by mutableStateOf("")

private set

init {

val id = savedStateHandle.get<Int>("id")

viewModelScope.launch {

state = myUseCase.suspendMethod(id)

}

}

}_
@Composable

fun DetailScreen() {

}_
@Composable

fun DetailScreen() {

val viewModel = hiltViewModel<DetailViewModel>()

}_
@Composable

fun DetailScreen() {

val viewModel = hiltViewModel<DetailViewModel>()

val stateConnectedToViewModelLifecycle = viewModel.state

}_
@Composable

fun DetailScreen() {

val viewModel = hiltViewModel<DetailViewModel>()

val stateConnectedToViewModelLifecycle = viewModel.state

val remembered = remember {

"executed again on configuration change and when navigating back"

}

}_
@Composable

fun DetailScreen() {

val viewModel = hiltViewModel<DetailViewModel>()

val stateConnectedToViewModelLifecycle = viewModel.state

val remembered = remember {

"executed again on configuration change and when navigating back"

}

val saveable = rememberSaveable {

"saved in a bundle"

}

}_
@Composable

fun DetailScreen() {

val viewModel = hiltViewModel<DetailViewModel>()

val stateConnectedToViewModelLifecycle = viewModel.state

val remembered = remember {

"executed again on configuration change and when navigating back"

}

val saveable = rememberSaveable {

"saved in a bundle"

}

LaunchedEffect(Unit) {

/
/
executed again on configuration change and when navigating back

}

}_
https://proandroiddev.com/viewmodels-using-compose-mutablestate
fl
ows-or-mutablestates-64d34ba548c5
Wrapping
up
Wrapping
up
unidirectional data
fl
ow
Wrapping
up
unidirectional data
fl
ow


screens instead of fragments
Wrapping
up
unidirectional data
fl
ow


screens instead of fragments


viewModels are still useful
Links
&
contacts
Architecting your Compose UI


developer.android.com/jetpack/compose/architecture


Jose Alcérreca - LiveData with SnackBar, Navigation and other events (the SingleLiveEvent case)


medium.com/androiddevelopers/livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case-ac2622673150


Michael Ferguson - Android SingleLiveEvent Redux with Kotlin Flow


proandroiddev.com/android-singleliveevent-redux-with-kotlin-flow-b755c70bb055


Lifecycle of composables


developer.android.com/jetpack/compose/lifecycle


Manuel Vivo - A Compose state of mind: Using Jetpack Compose's automatic state observation


www.youtube.com/watch?v=rmv2ug-wW4U


Fabio Collini - ViewModels using Compose: MutableStateFlows or MutableStates?


proandroiddev.com/viewmodels-using-compose-mutablestateflows-or-mutablestates-64d34ba548c5
@fabioCollini


linkedin.com/in/fabiocollini


github.com/fabioCollini


medium.com/@fabioCollini
THANKS
FOR YOUR
ATTENTION
QUESTIONS?
@fabioCollini

More Related Content

What's hot (19)

PDF
Testing Android apps based on Dagger and RxJava
Fabio Collini
 
PDF
Workshop 23: ReactJS, React & Redux testing
Visual Engineering
 
PDF
droidparts
Droidcon Berlin
 
PDF
Swift Delhi: Practical POP
Natasha Murashev
 
PDF
Protocol-Oriented MVVM (extended edition)
Natasha Murashev
 
PDF
Practical Protocol-Oriented-Programming
Natasha Murashev
 
PDF
Advanced javascript
Doeun KOCH
 
PDF
Practical Protocols with Associated Types
Natasha Murashev
 
PDF
Reactive, component 그리고 angular2
Jeado Ko
 
PDF
Workshop 25: React Native - Components
Visual Engineering
 
PPTX
Angular2 + rxjs
Christoffer Noring
 
PDF
Taming Core Data by Arek Holko, Macoscope
Macoscope
 
PDF
Daggerate your code - Write your own annotation processor
Bartosz Kosarzycki
 
PPTX
Workshop 1: Good practices in JavaScript
Visual Engineering
 
PDF
Protocol-Oriented MVVM
Natasha Murashev
 
PDF
Protocol Oriented MVVM - Auckland iOS Meetup
Natasha Murashev
 
PPTX
Typescript barcelona
Christoffer Noring
 
PDF
Reactive Programming with JavaScript
Codemotion
 
PDF
Redux Sagas - React Alicante
Ignacio Martín
 
Testing Android apps based on Dagger and RxJava
Fabio Collini
 
Workshop 23: ReactJS, React & Redux testing
Visual Engineering
 
droidparts
Droidcon Berlin
 
Swift Delhi: Practical POP
Natasha Murashev
 
Protocol-Oriented MVVM (extended edition)
Natasha Murashev
 
Practical Protocol-Oriented-Programming
Natasha Murashev
 
Advanced javascript
Doeun KOCH
 
Practical Protocols with Associated Types
Natasha Murashev
 
Reactive, component 그리고 angular2
Jeado Ko
 
Workshop 25: React Native - Components
Visual Engineering
 
Angular2 + rxjs
Christoffer Noring
 
Taming Core Data by Arek Holko, Macoscope
Macoscope
 
Daggerate your code - Write your own annotation processor
Bartosz Kosarzycki
 
Workshop 1: Good practices in JavaScript
Visual Engineering
 
Protocol-Oriented MVVM
Natasha Murashev
 
Protocol Oriented MVVM - Auckland iOS Meetup
Natasha Murashev
 
Typescript barcelona
Christoffer Noring
 
Reactive Programming with JavaScript
Codemotion
 
Redux Sagas - React Alicante
Ignacio Martín
 

Similar to Architectures in the compose world (20)

PPTX
The Workflow Pattern, Composed (2021)
Zach Klippenstein
 
PDF
Survive the lifecycle
Simon Joecks
 
PDF
Building Modern Apps using Android Architecture Components
Hassan Abid
 
PDF
Model View Intent on Android
Cody Engel
 
PDF
Arquitetando seu app Android com Jetpack
Nelson Glauber Leal
 
PDF
MVI - Managing State The Kotlin Way
Zeyad Gasser
 
PDF
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
Fabio Collini
 
PDF
Cleaning your architecture with android architecture components
Debora Gomez Bertoli
 
PDF
Working effectively with ViewModels and TDD - UA Mobile 2019
UA Mobile
 
PDF
[22]Efficient and Testable MVVM pattern
NAVER Engineering
 
PDF
Architecture Patterns in Practice with Kotlin. UA Mobile 2017.
UA Mobile
 
PDF
Reactive UI in android - Gil Goldzweig Goldbaum, 10bis
DroidConTLV
 
PDF
Kotlin, why?
Paweł Byszewski
 
PDF
MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.
UA Mobile
 
PPTX
MVM - It's all in the (Implementation) Details
Florina Muntenescu
 
PDF
Jetpack joyride!
Tony Kazanjian
 
PDF
MVM - It's all in the (Implementation) Details
Florina Muntenescu
 
PDF
Arquitetando seu aplicativo Android com Jetpack
Nelson Glauber Leal
 
PPTX
Introduction to kotlin
Shaul Rosenzwieg
 
PDF
JDD 2016 - Pawel Byszewski - Kotlin, why?
PROIDEA
 
The Workflow Pattern, Composed (2021)
Zach Klippenstein
 
Survive the lifecycle
Simon Joecks
 
Building Modern Apps using Android Architecture Components
Hassan Abid
 
Model View Intent on Android
Cody Engel
 
Arquitetando seu app Android com Jetpack
Nelson Glauber Leal
 
MVI - Managing State The Kotlin Way
Zeyad Gasser
 
From Java to Kotlin beyond alt+shift+cmd+k - Kotlin Community Conf Milan
Fabio Collini
 
Cleaning your architecture with android architecture components
Debora Gomez Bertoli
 
Working effectively with ViewModels and TDD - UA Mobile 2019
UA Mobile
 
[22]Efficient and Testable MVVM pattern
NAVER Engineering
 
Architecture Patterns in Practice with Kotlin. UA Mobile 2017.
UA Mobile
 
Reactive UI in android - Gil Goldzweig Goldbaum, 10bis
DroidConTLV
 
Kotlin, why?
Paweł Byszewski
 
MVVM with Databinding and Google's new ViewModel. UA Mobile 2017.
UA Mobile
 
MVM - It's all in the (Implementation) Details
Florina Muntenescu
 
Jetpack joyride!
Tony Kazanjian
 
MVM - It's all in the (Implementation) Details
Florina Muntenescu
 
Arquitetando seu aplicativo Android com Jetpack
Nelson Glauber Leal
 
Introduction to kotlin
Shaul Rosenzwieg
 
JDD 2016 - Pawel Byszewski - Kotlin, why?
PROIDEA
 
Ad

More from Fabio Collini (16)

PDF
Using Dagger in a Clean Architecture project
Fabio Collini
 
PDF
SOLID principles in practice: the Clean Architecture - Devfest Emila Romagna
Fabio Collini
 
PDF
SOLID principles in practice: the Clean Architecture
Fabio Collini
 
PDF
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Fabio Collini
 
PDF
Recap Google I/O 2018
Fabio Collini
 
PDF
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
Fabio Collini
 
PDF
From java to kotlin beyond alt+shift+cmd+k
Fabio Collini
 
PDF
Android Data Binding in action using MVVM pattern - droidconUK
Fabio Collini
 
PDF
Data Binding in Action using MVVM pattern
Fabio Collini
 
PDF
Android Wear CodeLab - GDG Firenze
Fabio Collini
 
PDF
Testable Android Apps using data binding and MVVM
Fabio Collini
 
PDF
Introduction to Retrofit and RxJava
Fabio Collini
 
PDF
Testable Android Apps DroidCon Italy 2015
Fabio Collini
 
PDF
Clean android code - Droidcon Italiy 2014
Fabio Collini
 
KEY
Librerie su Android: come non reinventare la ruota @ whymca 2012
Fabio Collini
 
KEY
Android Widget @ whymca 2011
Fabio Collini
 
Using Dagger in a Clean Architecture project
Fabio Collini
 
SOLID principles in practice: the Clean Architecture - Devfest Emila Romagna
Fabio Collini
 
SOLID principles in practice: the Clean Architecture
Fabio Collini
 
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Fabio Collini
 
Recap Google I/O 2018
Fabio Collini
 
From java to kotlin beyond alt+shift+cmd+k - Droidcon italy
Fabio Collini
 
From java to kotlin beyond alt+shift+cmd+k
Fabio Collini
 
Android Data Binding in action using MVVM pattern - droidconUK
Fabio Collini
 
Data Binding in Action using MVVM pattern
Fabio Collini
 
Android Wear CodeLab - GDG Firenze
Fabio Collini
 
Testable Android Apps using data binding and MVVM
Fabio Collini
 
Introduction to Retrofit and RxJava
Fabio Collini
 
Testable Android Apps DroidCon Italy 2015
Fabio Collini
 
Clean android code - Droidcon Italiy 2014
Fabio Collini
 
Librerie su Android: come non reinventare la ruota @ whymca 2012
Fabio Collini
 
Android Widget @ whymca 2011
Fabio Collini
 
Ad

Recently uploaded (20)

PDF
How Agentic AI Networks are Revolutionizing Collaborative AI Ecosystems in 2025
ronakdubey419
 
PDF
Salesforce Pricing Update 2025: Impact, Strategy & Smart Cost Optimization wi...
GetOnCRM Solutions
 
PDF
Enhancing Healthcare RPM Platforms with Contextual AI Integration
Cadabra Studio
 
PDF
Balancing Resource Capacity and Workloads with OnePlan – Avoid Overloading Te...
OnePlan Solutions
 
PDF
Why Are More Businesses Choosing Partners Over Freelancers for Salesforce.pdf
Cymetrix Software
 
PDF
Malaysia’s e-Invoice System: A Complete Guide for Businesses
Matiyas Solutions
 
PDF
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
PPTX
Chess King 25.0.0.2500 With Crack Full Free Download
cracked shares
 
PDF
Supabase Meetup: Build in a weekend, scale to millions
Carlo Gilmar Padilla Santana
 
PDF
WatchTraderHub - Watch Dealer software with inventory management and multi-ch...
WatchDealer Pavel
 
PDF
advancepresentationskillshdhdhhdhdhdhhfhf
jasmenrojas249
 
PDF
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 
PPTX
Presentation about Database and Database Administrator
abhishekchauhan86963
 
PDF
Applitools Platform Pulse: What's New and What's Coming - July 2025
Applitools
 
PPTX
Processing with Claim Management Automation Solutions
Insurance Tech Services
 
PDF
Odoo Customization Services by CandidRoot Solutions
CandidRoot Solutions Private Limited
 
PDF
What companies do with Pharo (ESUG 2025)
ESUG
 
PPTX
Cutting Optimization Pro 5.18.2 Crack With Free Download
cracked shares
 
PDF
AI Software Engineering based on Multi-view Modeling and Engineering Patterns
Hironori Washizaki
 
PPTX
Farrell__10e_ch04_PowerPoint.pptx Programming Logic and Design slides
bashnahara11
 
How Agentic AI Networks are Revolutionizing Collaborative AI Ecosystems in 2025
ronakdubey419
 
Salesforce Pricing Update 2025: Impact, Strategy & Smart Cost Optimization wi...
GetOnCRM Solutions
 
Enhancing Healthcare RPM Platforms with Contextual AI Integration
Cadabra Studio
 
Balancing Resource Capacity and Workloads with OnePlan – Avoid Overloading Te...
OnePlan Solutions
 
Why Are More Businesses Choosing Partners Over Freelancers for Salesforce.pdf
Cymetrix Software
 
Malaysia’s e-Invoice System: A Complete Guide for Businesses
Matiyas Solutions
 
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
Chess King 25.0.0.2500 With Crack Full Free Download
cracked shares
 
Supabase Meetup: Build in a weekend, scale to millions
Carlo Gilmar Padilla Santana
 
WatchTraderHub - Watch Dealer software with inventory management and multi-ch...
WatchDealer Pavel
 
advancepresentationskillshdhdhhdhdhdhhfhf
jasmenrojas249
 
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
ESUG
 
Presentation about Database and Database Administrator
abhishekchauhan86963
 
Applitools Platform Pulse: What's New and What's Coming - July 2025
Applitools
 
Processing with Claim Management Automation Solutions
Insurance Tech Services
 
Odoo Customization Services by CandidRoot Solutions
CandidRoot Solutions Private Limited
 
What companies do with Pharo (ESUG 2025)
ESUG
 
Cutting Optimization Pro 5.18.2 Crack With Free Download
cracked shares
 
AI Software Engineering based on Multi-view Modeling and Engineering Patterns
Hironori Washizaki
 
Farrell__10e_ch04_PowerPoint.pptx Programming Logic and Design slides
bashnahara11
 

Architectures in the compose world