Skip to content

Narinc/Narinc-Case

Repository files navigation

Narinc LinkedIn

Meditations and Stories

MediStory - App consuming a local storage to display meditations and stories it has been built with clean architecture principles, Repository Pattern, and MVVM pattern as well as Architecture Components.

App features:

  • Login Screen
  • Home Screen with Meditations and Stories

Screenshots

List

List

List

Architecture

Uses concepts of the notorious Uncle Bob's architecture called Clean Architecture.

  • Better separation of concerns. Each module has a clear API., Feature related classes life in different modules and can't be referenced without explicit module dependency.
  • Features can be developed in parallel eg. by different teams
  • Each feature can be developed in isolation, independently from other features
  • faster compile time

Modules:

  • app - It uses all the components and classes related to Android Framework. It gets the data from presentation layer and shows on UI. (access all the modules)
  • data - The data layer implements the repository interface that the domain layer defines. This layer provide a single source of truth for data. (Kotlin module that can only access domain module)
  • remote - Handles data interacting with the network. (can only access data module)
  • cache - Handles data interacting with the local storing (Room DB). (can only access data module)
  • domain - The domain layer contains the UseCases that encapsulate a single and very specific task that can be performed. This task is part of the business logic of the application. (Kotlin module that cannot access any other module)
  • presentation - MVVM with ViewModels listening States that the UI consume. The ViewModel does not know anything about it's consumers. (Android module that can only access domain module)

Tech stack - Library:

  • Kotlin
  • Coroutines - A coroutine is a concurrency design pattern that you can use on Android to simplify code that executes asynchronously
  • Flow - Flow is used to pass (send) a stream of data that can be computed asynchronously
  • Dagger-Hilt - for dependency injection.
  • Kotlin-DSL - Used to handle gradle dependencies and config versions
  • JetPack
    • LiveData - For reactive style programming (from VM to UI).
    • Lifecycle - Used get lifecyle event of an activity or fragment and performs some action in response to change
    • ViewModel - Stores UI-related data that isn't destroyed on UI changes.
    • Room - Used to create room db and store the data.
    • Navigation - Used to navigate between fragments
    • Data Binding - Used to bind UI components in your XML layouts.
    • Material-Components - Material design components like ripple animation, cardView.
    • Retrofit - Used for REST api communication.
    • OkHttp - HTTP client that's efficient by default: HTTP/2 support allows all requests to the same host to share a socket
    • Moshi - Used to convert Java Objects into their JSON representation and vice versa.
    • Timber - Used for logging.
    • Glide - Glide is a fast and efficient image loading library for Android

TODO

  • Unit test
  • Jacoco for test coverage
  • Ktlint or Detekt

Reference repository

This repository code is mostly inspired by Android-Clean-Architecture-Boilerplate.

Contributions

Please feel free to file an issue for errors, suggestions or feature requests.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages