- The UI is not made in Jetpack Compose.
- It is extremely important to point out that the development of a layout with an advanced visual aspect was not taken into account.
- The division of modules did not take into account the scalability factor. In a real project, we could create, for example, a multi repository app,
where we could have, for example:
- A data repository, following the "single source of truth (SSOT)" model: https://en.wikipedia.org/wiki/Single_source_of_truth
- A separate repository for each feature of the project - for example, the urlshortener module. Such feature modules would, in the end, be incorporated into a parent application via maven/gradle, applying a dependency management strategy - BOM or Bill Of Materials (example at, https://firebase.blog/posts/2020/11/dependency -management-ios-android).
- A repository for managing SDK infrastructure like firebase.
- A repository for managing skds for analytics...
Urlshortener is a small Android app that allows you to shorten urls and display a history of recently shortened links to your favorite websites.
This app consists of only one screen, which has:
- A text entry where the user can type the URL of the site to shorten;
- A button that will trigger the action of sending this link to the service;
- A list with the recently shortened links/aliases.
- Platform - Android: https://developer.android.com/
- Language - Kotlin: https://kotlinlang.org/
- Single activity - Presentation by Ian Lake -> 'Single activity - Why, when, and how (Android Dev Summit '18)': https://www.youtube.com/watch?v=2k8x8V77CrU&ab_channel=AndroidDevelopers
- Multi-Module - Presentation by Yigit Boyar, Florina Mutenescu -> 'Build a modular Android app architecture (Google I/O'19)': https://www.youtube.com/watch?v=PZBg5DIzNww&ab_channel=AndroidDevelopers
- Navigation component: https://developer.android.com/guide/navigation/navigation-getting-started
- Koin -DI framework: https://insert-koin.io/
- MVVM: https://developer.android.com/topic/architecture
- Clean architecture: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
- Clean code: https://www.oreilly.com/library/view/clean-code-a/9780136083238/
- Coroutines: https://kotlinlang.org/docs/coroutines-guide.html
- Retrofit: https://square.github.io/retrofit/
- S.O.L.I.D: https://en.wikipedia.org/wiki/SOLID
- Unit tests - MockK: https://github.com/mockk/mockk
- Component testing with - Robolectric: http://robolectric.org/
- Instrumented tests with - Espresso: https://developer.android.com/training/testing/espresso
The application is divided into 03 modules:
-
app: responsible for running the UI tests (in an eventual deploy, this module - and all the code contained in it - will not will be deployed to production).
-
core:
- Infrastructure for communication with the API (ApiClientBuilder, RequestManager), exceptions for communication with the server, etc...
- Fragment state management: BaseViewModel, ViewState.
-
urlshortener: module responsible for implementing the feature. Contains the canvas (UrlShortenerListFragment) with which the user interacts.