Skip to content

mustafacol/Pokemon

Repository files navigation

Soostone Pokemon

🗡️ Application demonstrates modern Android development with Hilt, Coroutines, Flow, Jetpack Compose, and Material Design based on MVVM architecture.


Tech stack

  • Minimum SDK level 24
  • Kotlin based, Coroutines + Flow for asynchronous.
  • Jetpack
    • Compose: Jetpack Compose is Android’s recommended modern toolkit for building native UI. It simplifies and accelerates UI development on Android. Quickly bring your app to life with less code, powerful tools, and intuitive Kotlin APIs.
    • Navigation The Navigation component provides support for Jetpack Compose applications. You can navigate between composables while taking advantage of the Navigation component's infrastructure and features.
    • Lifecycle: Observe Android lifecycles and handle UI states upon the lifecycle changes.
    • ViewModel: Manages UI-related data holder and lifecycle aware. Allows data to survive configuration changes such as screen rotations.
    • Hilt: for dependency injection.
  • Architecture
  • Retrofit2 & OkHttp3: Construct the REST APIs and paging network data.
  • Gson: Google's modern JSON library for Kotlin and Java.
  • Material-Components: Material design components for building ripple animation, and CardView.
  • Coil: An image loading library for Android backed by Kotlin Coroutines.

Architecture

Application is based on the MVVM architecture and the Use Case pattern, which follows the Google's official architecture guidance.

The overall architecture of application is composed of three layers; the presentation layer, domain layer and the data layer. Each layer has dedicated components and they have each different responsibilities, as defined below:

Architecture Overview

  • Each layer follows (https://developer.android.com/topic/architecture/ui-layer#udf); the UI layer emits user events to the data layer, and the data layer exposes data as a stream to other layers.
  • The data layer is designed to work independently from other layers and must be pure, which means it doesn't have any dependencies on the other layers.

With this loosely coupled architecture, you can increase the reusability of components and scalability of your app.

Presentation Layer

The presenation layer consists of UI elements to configure screens that could interact with users and ViewModel that holds app states and restores data when configuration changes.

Data Layer

The data Layer consists of repositories, which include business logic, such as querying data from the local database and requesting remote data from the network. It is implemented as an offline-first source of business logic and follows the single source of truth principle.

Domain Layer

The domain layer is responsible for encapsulating complex business logic, or simple business logic that is reused by multiple ViewModels. This layer is optional because not all apps will have these requirements. You should use it only when needed—for example, to handle complexity or favor reusability.

Releases

No releases published

Packages

 
 
 

Contributors

Languages