Layered Architecture in a Kotlin Multiplatform project
This project was created by a series of posts you can find on my blog https://jflavio.com
The domain and data layers are both inside the shared
module of the Kotlin Multiplatform project. The final architecture looks like this:
Core or shared module
Here is where all the business logic is defined. It contains cross code for all platform. This includes: repositories interfaces, repositories implementations, data sources implementation, networking access for consuming REST APIs, interactors and main domain models.
androidMain
Here we only have an implementation of the database driver interface defined in the commonMain
package but for Android.
iOSMain
Here we only have an implementation of the database driver interface defined in the commonMain
package but for the iOS project.
commonMain
Here is where magic happens. We define the domain and data layers inside this package. By the way, we support Kotlin Coroutines ?.
Android module
Implements the MVVM pattern using Jetpack Compose. The ViewModels depends on the interactors interfaces that are defined in the domain layer inside the shared
module.
iOS module
Implements the MVVM pattern using SwiftUI. The ViewModels depends on the interactors interfaces that are defined in the domain layer inside the shared
module.