Skip to content

πŸ’Ž Android Base Project with Kotlin and MVVM applying clean architecture

Notifications You must be signed in to change notification settings

Mina-Mikhail/Kotlin-Base-MVVM

Repository files navigation

Android Clean Architecture

πŸ‘‰ Clean Architecture:

πŸ‘‰ Domain & Data Layer:

πŸ‘‰ Presentation Layer:

πŸ‘‰ Architecture:

  • Following Clean Architecture.
  • MVVM Architecture.
  • Repository pattern.
  • Use Cases.
  • Applying SOLID principles, each class has a single job with separation of concerns by making classes independent of each other and communicating with interfaces.
  • Using Kotlin-KTS & buildSrc to handle project dependencies.

πŸ‘‰ Tech Stack & Libraries:

  • Navigation component - navigation graph for navigating and replacing screens/fragments
  • DataBinding - allows to more easily write code that interacts with views and replaces findViewById.
  • ViewModel - UI related data holder, lifecycle aware.
  • Flow & StateFlow - Build data objects that notify views when the underlying database changes.
  • Dagger-Hilt for dependency injection. Object creation and scoping is handled by Hilt.
  • Kotlin Coroutines - for managing background threads with simplified code and reducing needs for callbacks
  • Retrofit2 & OkHttp3 - to make REST requests to the web service integrated.
  • Coil - for image loading.
  • Material Bottom Navigation - to handle bottom tabs with support for multiple backStack.

πŸ‘‰ Project Structure:

  • Sample includes some basic features required in each project like :
    • Splash.
    • App Tutorial.
    • Login - (With Business Logic).
    • Sign Up - (Blank Screens).
    • Forgot Password -(Blanck Screens).
    • Home Screen - (Contains 3 Tabs with 3 NavGraphs).

πŸ‘‰ Extra Modules:

  • You will find extra modules also developed by me like :
    • AppTutorial - (To handle onBoarding tutorial screens).
    • ActionChooser - (A customized pop up with recyclerView of single selection).
    • PrettyPopUp (A customized pop up to display message to user with two actions (positive & negative buttons)).
    • ImagesSlider (An images slider supports auto scrolling for images from url and support GIF images).

πŸ‘‰ Code Style:

  • Following official kotlin code style

πŸ‘‰ Apply Git Hooks:

  • To apply git hooks in order to automate process of styling and checking your code, just follow this steps:
    • Copy pre-commit file depending on your OS from myGitHooks.
    • Paste it into .git/hooks in your project.
  • Now each time you commit your changes, ktlintFormat and ktlintCheck will automatically run

πŸ‘‰ Local Development:

  • Here are some useful Gradle commands for executing this example:
    • ./gradlew clean - Deletes build directory.

πŸ‘‰ TO DO:

  • Apply ktlint for checking code style.
  • Use git hooks to automate code checking and styling before any new commit.
  • Use Flow in Domain layer.
  • Use StateFlow in Presentation layer.
  • Use UseCases.
  • Handle Different Build Variants.
  • Use Ktor as network client instead of Retrofit & OKHTTP.
  • Use Data Store instead of Shared Preferences.
  • Explore full MVI implementation.
  • Add some unit tests.

πŸ‘‰ Contributing to Project:

  • Just fork this repository and contribute back using pull requests.
  • Any contributions, large or small, major features, bug fixes, are welcomed and appreciated but will be thoroughly reviewed .

πŸ‘‰ Find this project useful ? ❀️

  • Support it by clicking the ⭐ button on the upper right of this page. ✌️

πŸ‘‰ Stargazers: ⭐

Stargazers repo roster for @sadanandpai/javascript-code-challenges

πŸ‘‰ Forkers: βš’οΈ

Forkers repo roster for @sadanandpai/javascript-code-challenges

πŸ‘‰ Donation:

If this project help you reduce time to develop, you can give me a cup of coffee :)

Buy Me A Coffee

⚠️ License:

   Copyright (C) 2021 MINA MIKHAIL PRIVATE LIMITED

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.