This is the SDK written in Kotlin for thenewboston with primary focus for Android and Desktop clients. The repository contains an android project which will demonstrate how to use
the SDK.
The library itself will solely contain the domain and data layers of thenewboston. The presentation layer will be the responsibility of
the host application (see our demo application). We'll be using Clean Architecture to structure the layers, dependencies and communication flow.
A rough architecture pattern would look like this:
Domain Layer
Data Layer
UseCase -> IRepository
RepositoryImpl -> DataSource (Local / Remote) --> Service (Http, Cache)
Because of Dependency Injection the UseCase will know nothing about the actual repository.
(see https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html for more information, or read the book, it's nice)
Each layer would have its own layer model and mapping happens before data gets passed into the above layer, e.g.
A HTTP Service class does a http call and gets a JSON response, maps it to a DTO (DataTransferObject) and returns it to the DataSource.
The DataSource has a mapper which transforms the DataSource to the entity (also called domain model). After mapping, the domain model
gets returned to the repository which then gets bubbled up to the calling UseCase.
Repositories can not communicate between each other, if data from different repositories needs to be aggregated then a UseCase will call several
repositories and forge the model it requires.
To not be coupled to any platform we'll avoid android specific libraries.
Besides Clean Architecture we'll use following libraries heavily:
Coroutines for Asynchronous / Parallel Processing
Ktor for Http Calls
JUnit for unit tests
Mockk for Mocking
By using the SDK you can create your own client to manage thenewboston currency, the next great thing!
As stated above, the SDK will not contain platform dependent details, such as storage engines or event / lifecycle handlers.
The reason is that eventually, we'll have the whole SDK compatible with Kotlin Multiplatform and have one SDK to rule them all.
(see https://kotlinlang.org/docs/reference/multiplatform.html)
Project structure contains the following skeleton structure:
When making an endpoint request to a specific api, for example, bank API. You make the request in the BankDataSource and then expose to the BankRepository.
Contribution
To start contributing pick an issue, leave a comment that you want to work on this and once you're assigned then you are ready to go.
Ideas for improvements or questions are always welcome, in this case feel free to create an issue.
Code that contains logic needs to be unit tested, if you have no experience with testing or questions feel free to join the #kotin-sdk channel.
The community is happy to help you out.
Development Setup
Static Code Analysis
We use detekt for static code analysis. If you're using IntelliJ, we recommend you install the detekt IntelliJ plugin.
After running gradle detekt, you can find the entire analysis report in <module>/build/reports/detekt/
The gradle detekt task runs as part of gradle check
Outlook
Once we finish development of the SDK there are two paths we can pursue:
Port the SDK to Kotlin Multiplatform to offer the SDK for iOS, Desktop and other Platforms
Build an App using Kotlin-SDK (the app module in this repository)
请发表评论