A complete Kotlin application built to demonstrate the use of Modern development tools with best practices implementation using multi-module architecture developed using SOLID principles

Overview

droid-pure-kotlin-application ๐Ÿงžโ€

Android Best practices Kotlin Coroutines DaggerHilt Moshi Firebase Datastore Timber Orhanobut Jetpack compose Coil Google Material Compose Navigation Hilt navigation compose Activity compose Ui tooling preview Compose ui Kt lint Crashlytics

๐™ธ๐š—๐š๐š›๐š˜๐š๐šž๐šŒ๐š๐š’๐š˜๐š— ๐Ÿ’ก

๐Ÿท๏ธ This repository serves as template and demo for building android applications for scale. It is suited for large teams where individuals can work independently on feature wise and layer wise reducing the dependency on each other. It is built with pure kotlin in the project namely compose for the presentation-layer, kotlin for writing the business-logic, kotlin-dsl for handeling the dependencies.
๐Ÿท๏ธ Single activity architecture where compose-navigation is used for navigating between the screens. Also care is taken so that dependencies used in presentation layer is not available for domain layer and data layer. Multimodule architecture used with reusability by adhering SOLID-principles, also unit-testing, integration-testing in mind. Coding for abstraction rather than implementation is followed in the project that enables testing and so that fakes can be easily provided for abstractions for testing individual components.

๐Ÿงฑ ๐Ÿงฑ Application is under constant improvement ๐Ÿงฑ ๐Ÿงฑ


๐™ฟ๐šž๐š›๐šŽ ๐š”๐š˜๐š๐š•๐š’๐š— ๐Ÿ—‚๏ธ

dev_logo

๐Ÿท๏ธ Programming language: โž– By migrating away from Java and towards kotlin, we can leverage the features like better readability, null saftey, less code, benifits of improved syntax and others.
๐Ÿท๏ธ Kotlin DSL: โž– Earlier we used to use gradle for organizing dependencies. Gradle is written in a groovy programming language. Using the kotlin-DSL, we can organize the dependencies in our project cleaner and in an efficient way. Type safety. This allows better autocompletion which was missing from grovey till now. Code navigation between files becomes easy in Kotlin DSL. Refactoring is much easier.
๐Ÿท๏ธ Compose: โž– Earlier we had xml for building the UI and thus there was one more language hooked to android project. But with the addition of jetpack compose, Even the UI will be built in kotlin language.


๐š†๐š‘๐šข ๐šŒ๐š•๐šŽ๐šŠ๐š— ๐šŠ๐š›๐šŒ๐š‘๐š’๐š๐šŽ๐šŒ๐š๐šž๐š›๐šŽ ๐š’๐šœ ๐š—๐šŽ๐šŽ๐š๐šŽ๐š ๐Ÿ—‚๏ธ

dev_logo

๐Ÿท๏ธ Scalability: โž– When new features are added, using the clean architecture we can easily add the new features and maintain old existing features without breaking them.
๐Ÿท๏ธ Testability: โž– For the new features, its essential we write a code that can be tested for all possible inputs so that once in production we can forecast all possible scenarios and handle them.
๐Ÿท๏ธ Understandable: โž– Scaling a product with keeping the code testable is good but its also should be in such a way that everyone should understand it and also should easily be modify it.

๐š†๐š‘๐šข ๐š–๐šž๐š•๐š๐š’ ๐š–๐š˜๐š๐šž๐š•๐šŽ ๐š’๐šœ ๐šž๐šœ๐šŽ๐š ๐š’๐š— ๐š™๐š›๐š˜๐š“๐šŽ๐šŒ๐š ๐Ÿ—‚๏ธ

๐Ÿท๏ธ A multi module project helps us to segrigate between the layers of code in the project and enforcing strict seperation of concerns.
๐Ÿท๏ธ When working on a large project this will keep the team to work in layer wise and also feature wise.
๐Ÿท๏ธ A change in one feature will not affect other features in the project.


๐™ณ๐šŽ๐š™๐šŽ๐š—๐š๐šŽ๐š—๐šŒ๐šข ๐™ธ๐š—๐š“๐šŽ๐šŒ๐š๐š’๐š˜๐š— ๐Ÿ—‚๏ธ

dev_logo

๐Ÿท๏ธ A Depencency Injection results in a loosely coupled programs. It helps to achieve inversion of control. Inversion of control means a object or function recieves another object or function as a dependency.
๐Ÿท๏ธ We use hilt that is built on top of dagger tool that generates code on behalf of user and helps to attain the inversion control easily. This is very essential because all the extra code that we need to generate, hilt will do it for us.
๐Ÿท๏ธ The inversion control becomes even more crucial part of the structure in case of multi module project.
๐Ÿท๏ธ This also helps in unit testing thte code because, since object is not created and instead provided to a function, we can easily mock it during unit testing.

๐™ฒ๐š˜๐š–๐š–๐šž๐š—๐š’๐šŒ๐šŠ๐š๐š’๐š˜๐š— ๐š‹๐šŽ๐š๐š ๐šŽ๐šŽ๐š— ๐š๐š‘๐šŽ ๐š•๐šŠ๐šข๐šŽ๐š›๐šœ ๐Ÿ—‚๏ธ

dev_logo

๐Ÿท๏ธ Presentation Layer: โž– This layer is the UI layer of the application, It contains composables and view-models. The presentation layer communicates with the domain layer, But the presentation layer is not aware of the data layer.
๐Ÿท๏ธ Domain Layer: โž– This layer contains use cases that contain business logic that perform one functionality each. It also contains the interfaces that communicates with repository which is present in the data layer.
๐Ÿท๏ธ Data Layer: โž– The data layer contains the repositries, The repository can be a preference repository, remote API, local-filesystem etc. The data layer communicates back with the domain layer after fetching the data.

๐™ธ๐š–๐š™๐š•๐šŽ๐š–๐šŽ๐š—๐š๐šŠ๐š๐š’๐š˜๐š— ๐š˜๐š ๐š‚๐™พ๐™ป๐™ธ๐™ณ ๐š™๐š›๐š’๐š—๐šŒ๐š’๐š™๐š•๐šŽ๐šœ ๐Ÿ—‚๏ธ

This applicaion is developed keeping in mind of clean architecture principles

SINGLE RESPONSIBILITY OPEN CLOSED PRINCIPLE LISKOV SUBSTITUTION PRINCIPLE INTERFACE SEGREGATION PRINCIPLE DEPENDENCY INVERSION PRINCIPLE
Each class having one responsibility. If there is a change in it, it must be because of only one reason only. If there are two reasons for a class to change, then it violates single responsibility principle. This indicates that the class is open for extension but closed for modification When we have a class that is inheriting the parent, the parent class functionality must be replaceable using the child class without modifying the functionality of parent class Here we should not force a class to do something that it does not want to do, Say a class is implementing interface then it overrides all the functions in it. Now if we donโ€™t want a function of interface to be implemented then we give the default behaviour for the interface and so that it will not force the child class to override that method This indicates that, a class must depend on abstraction instead of concrete implementation. Say we want a implementation to be used for a class thence need to inject a abstraction for it instead of concrete implementation so that if its implementation changes in future , it must not affect where the abstract version of it is implemented

๐™ฐ๐š๐šŸ๐šŠ๐š—๐š๐šŠ๐š๐šŽ๐šœ ๐šŠ๐š—๐š ๐™ณ๐š’๐šœ๐šŠ๐š๐šŸ๐šŠ๐š—๐š๐šŠ๐š๐šŽ๐šœ ๐š˜?? ๐š–๐šž๐š•๐š๐š’ ๐š–๐š˜๐š๐šž๐š•๐šŽ ๐šŠ๐š›๐šŒ๐š‘๐š’๐š๐šŽ๐šŒ๐š๐šž๐š›๐šŽ ๐Ÿ—‚๏ธ

๐™ฐ๐š๐šŸ๐šŠ๐š—๐š๐šŠ๐š๐šŽ๐šœ

Clear separation Faster build time
โ€ข Each of the modules is a library and it can depend on each other
โ€ข If there is a scenario where one library is not dependent on another, Then they can't access each other
โ€ข Thus, instead of adding terms of separate packages in the app module, we can enforce strict modularity by modularising it
โ€ข In a large project and big team we can enforce, who works on which project. Thus one person working on one won't affect other modules
โ€ข Using the multi-module we can decrease the build time. When in multi-module each module will use separate threads so build time will decrease since all modules will build independently
โ€ข Since Gradle needs to build the module that has been changed, it doesn't need to make the modules that have not been changed
โ€ข Point to note here is that, say there is a root module with few child modules, if the root module changes, all the child modules also need to rebuild
โ€ข Support for instant apps and dynamic feature module
โ€ข Using this we can make parts of our app reusable

๐™ณ๐š’๐šœ๐šŠ๐š๐šŸ๐šŠ๐š—๐š๐šŠ๐š๐šŽ๐šœ

โ€ข Lot of initial code
โ€ข Not knowing what problem it will cause


๐™ผ๐š…๐š…๐™ผ ๐šœ๐š๐š›๐šž๐šŒ๐š๐šž๐š›๐šŽ ๐šž๐šœ๐šŽ๐š ๐š’๐š— ๐š–๐šž๐š•๐š๐š’-๐š–๐š˜๐š๐šž๐š•๐šŽ ๐š๐š˜๐š› ๐šŒ๐š•๐šŽ๐šŠ๐š— ๐šŠ๐š›๐šŒ๐š‘๐š’๐š๐šŽ๐šŒ๐š๐šž๐š›๐šŽ

mvvm mvvm-improved














๐Ÿท๏ธ Implementations of repositories sits in the data layer.
๐Ÿท๏ธ The Data layer has reference to domain layer, So it can access all the classes from the data layer.
๐Ÿท๏ธ Presentation layer has reference to the domain layer, so it can access all the classes from the domain layer and not data layer.
๐Ÿท๏ธ We alwaays inject abstractions to any class instead of concrete implementation.
๐Ÿท๏ธ Data flows from presentation layer to data layer if data is saved locally or sent to server. In other case the data is retrieved from data layer to presentation layer in case when data is retrieved from server to UI displayed or from data saved locally to UI displayed


๐šƒ๐šŽ๐šœ๐š๐š’๐š—๐š ๐š๐š‘๐šŽ ๐šŒ๐š˜๐š๐šŽ ๐Ÿงช

๐Ÿท๏ธ We test the features of the code, Each of the features contain three layers namely data, domain, presentation.
๐Ÿท๏ธ In the core layer we can write tests for the implementation and repository for each of modules.
๐Ÿท๏ธ UI tests - Development in progress

๐™ฟ๐šŠ๐šŒ๐š”๐šŠ๐š๐šŽ ๐š‚๐š๐š›๐šž๐šŒ๐š๐šž๐š›๐šŽ ๐š’๐š— ๐š๐š‘๐šŽ ๐š™๐š›๐š˜๐š“๐šŽ๐šŒ๐š ๐Ÿ“ฆ

Project Folder                                    # Root Package
.
โ”œโ”€โ”€ app                                           # It is the starting point for the application
โ”‚   โ”œโ”€โ”€ activity                                  # Entire application has just one activity
โ”‚   โ”œโ”€โ”€ view-model                                # This will be the view-model for the single activity     
|   โ”œโ”€โ”€ navigation                                # It contains the navigation compose and the routes used in the application
โ”‚   โ””โ”€โ”€ application                               # Singleton used at application level
|
โ”œโ”€โ”€ buildSrc                                      # It contains all project dependencies & its version references that can be modified from one place
|
โ”œโ”€โ”€ core                                          # Module with code that can be re-used in all the modules. This also helps us to manage them easily
โ”‚   โ”œโ”€โ”€ res                                       # String resources used in the project
โ”‚   โ””โ”€โ”€ java
โ”‚       โ”œโ”€โ”€ data                                  # data layer of the core module
โ”‚       โ”‚    โ”œโ”€โ”€ implementation                   # contains implementations of the features hosted in core module
โ”‚       โ”‚    โ””โ”€โ”€ repository                       # contains repository for the features
โ”‚       โ”‚  
โ”‚       โ”œโ”€โ”€ di                                    # Hilt dependency injection
โ”‚       โ”œโ”€โ”€ domain                                # Domain layer for all the reusable third party features in project
โ”‚       โ”‚   โ”œโ”€โ”€ features                          # Contains interface for all the reusable third party features in project
โ”‚       โ”‚   โ””โ”€โ”€ models                            # data modules used thorught the project
โ”‚       โ”‚
โ”‚       โ””โ”€โ”€ platform                              # Can old other miscellaneous things needed in project, some are listed below
โ”‚           โ”œโ”€โ”€ base                              # Can hold base classes that are used in different features in project
โ”‚           โ”œโ”€โ”€ extensions                        # kotlin extensions that can be kept in one place and handeled
โ”‚           โ””โ”€โ”€ functional                        # Other util functional elements in teh project
โ”‚      
โ”‚ 
โ”œโ”€โ”€ core-ui                                       # Module contains all the UI related things in the project
โ”‚   โ”œโ”€โ”€ res                                       
โ”‚   โ”‚   โ”œโ”€โ”€ drawable                              # Contains all the drawables needed for the project
โ”‚   โ”‚   โ””โ”€โ”€ font                                  # Place we can store the font files in the project
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ java
โ”‚       โ”œโ”€โ”€ composables                           # Here we store the reusable composables used for the project 
โ”‚       โ””โ”€โ”€ theme                                 # Contains the theme file used in project
โ”‚ 
โ””โ”€โ”€ features                                      # The module contains all the features used in project
    โ”‚
    โ”œโ”€โ”€ common                                    # sub-module that holds the logic that is re-used in multiple features
    โ”‚   โ”‚
    โ”‚   โ”‚
    โ”‚   โ”œโ”€โ”€ common_data                           # sub-module for data
    โ”‚   โ”‚   โ”œโ”€โ”€ di                                # di for current module
    โ”‚   โ”‚   โ”œโ”€โ”€ repository                        # repository used for injection
    โ”‚   โ”‚   โ””โ”€โ”€ service                           # service used in repository
    โ”‚   โ”‚   
    โ”‚   โ”‚
    โ”‚   โ””โ”€โ”€ common_domain                         # sub-module for domain
    โ”‚       โ”œโ”€โ”€ di                                # di used for having use-case data object instance
    โ”‚       โ”œโ”€โ”€ repository                        # interface of the repository
    โ”‚       โ””โ”€โ”€ usecases                          # individual logic for domain data
    โ”‚         
    โ””โ”€โ”€ login                                     # sub-module that contains one feature
        โ”‚
        โ”‚
        โ”œโ”€โ”€ login_data                            # sub-module for data
        โ”‚   โ”œโ”€โ”€ di                                # di used to build the module and create instances of service and repository of current module
        โ”‚   โ”œโ”€โ”€ repository                        # implementation of the repository
        โ”‚   โ””โ”€โ”€ service                           # service used in repository
        โ”‚   
        โ”‚
        โ”œโ”€โ”€ login_domain                          # sub-module for domain
        โ”‚   โ”œโ”€โ”€ di                                # di used for having use-case data object instance
        โ”‚   โ”œโ”€โ”€ repository                        # interface of the repository
        โ”‚   โ””โ”€โ”€ usecases                          # individual logic for domain data
        โ”‚   
        โ”‚
        โ””โ”€โ”€ login_presentation                    # sub-module for presentation
            โ”œโ”€โ”€ states                            # states of the data displayed and view-model
            โ”œโ”€โ”€ view-composable                   # composable representing a screen
            โ””โ”€โ”€ viewmodel                         # view model for the composable

๐™ฒ๐š˜๐š๐šŽ ๐šš๐šž๐šŠ๐š•๐š’๐š๐šข ๐Ÿ“บ

Run Kt lint ๐Ÿ”ง

๐Ÿท๏ธ It is static code analysis tool that is used to analyze the Kotlin code for you. It will check if you have written the code by following the Kotlin code guidelines or not.

// To check the list of errors
./gradlew ktlintCheck  
// Try to auto auto format errors
./gradlew ktlintFormat

๐™ท๐š˜๐š  ๐š๐š˜ ๐š›๐šž๐š— ๐š๐š‘๐šŽ ๐šœ๐šŠ๐š–๐š™๐š•๐šŽ ๐šŠ๐š™๐š™๐š•๐š’๐šŒ๐šŠ๐š๐š’๐š˜๐š— ๐Ÿ‘ฃ

๐Ÿท๏ธ Basically You just follow steps to create a firebase account and eanable authentication module, I have summarized some steps below.
1๏ธโƒฃ Before running the sample application, Please create a account in firebase console.
2๏ธโƒฃ Now enable the authentication in settings for firebase(This is used during the authentication of login).
3๏ธโƒฃ Add the google-services.json in the app level of the project that is obtained when creating a project in firebase.
4๏ธโƒฃ Last but not least add your application SHA in your firebase settings.

๐šƒ๐šŽ๐šŒ๐š‘ ๐šœ๐š๐šŠ๐šŒ๐š” ๐Ÿ—๏ธ ๏ธ

What How
๐ŸŽญ ๐š„๐šœ๐šŽ๐š› ๐™ธ๐š—๐š๐šŽ๐š›๐š๐šŠ๐šŒ๐šŽ (๐™ฐ๐š—๐š๐š›๐š˜๐š’๐š) ๐™น๐šŽ๐š๐š™๐šŠ๐šŒ๐š” ๐™ฒ๐š˜๐š–๐š™๐š˜๐šœ๐šŽ
๐Ÿ— ๐™ฐ๐š›๐šŒ๐š‘๐š’๐š๐šŽ๐šŒ๐š๐šž๐š›๐šŽ ๐™ฒ๐š•๐šŽ๐šŠ๐š— ๐™ฐ๐š›๐šŒ๐š‘๐š’๐š๐šŽ๐šŒ๐š๐šž๐š›๐šŽ
๐Ÿ’‰ ๐™ณ๐™ธ (๐™ฐ๐š—๐š๐š›๐š˜๐š’๐š) ๐™ท๐š’๐š•๐š
๐ŸŒŠ ๐™ฐ๐šœ๐šข๐š—๐šŒ ๐™ฒ๐š˜๐š›๐š˜๐šž๐š๐š’๐š—๐šŽ๐šœ + Flow
๐ŸŒ ๐™ฝ๐šŽ๐š๐š ๐š˜๐š›๐š”๐š’๐š—๐š ๐™ต๐š’๐š›๐šŽ๐š‹๐šŠ๐šœ๐šŽ

๐™ฒ๐šž๐š›๐š›๐šŽ๐š—๐š๐š•๐šข ๐š๐šŽ๐šŠ๐š๐šž๐š›๐šŽ๐šœ ๐š๐šŽ๐šŸ๐šŽ๐š•๐š˜๐š™๐šŽ๐š ๐Ÿงฐ

Demo contains three screen application namely registration, login, forgot-password and external service used here is firebase. User can create an account using registration. User can login and once login is successful the user details is saved in data-store

Login Registration Forgot Password

๐™ฒ๐š˜๐š—๐š๐š›๐š’๐š‹๐šž๐š๐šŽ ๐Ÿ™‹โ€โ™‚๏ธ

Read contribution guidelines for more information regarding contribution.

๐™ต๐šŽ๐šŽ๐š๐š‹๐šŠ๐šŒ๐š” โœ๏ธ

Feature requests are always welcome, File an issue here.

๐™ต๐š’๐š—๐š ๐š๐š‘๐š’๐šœ ๐š™๐š›๐š˜๐š“๐šŽ๐šŒ๐š ๐šž๐šœ๐šŽ๐š๐šž๐š• ? โค๏ธ

Support it by clicking the โญ button on the upper right of this page. โœŒ๏ธ

๐™ป๐š’๐šŒ๐šŽ๐š—๐šœ๐šŽ Licence ๐Ÿ’ณ

This project is licensed under the Apache License 2.0 - see the LICENSE file for details

You might also like...
 Futurama Quotes demonstrates modern Android development implements MVVM architecture
Futurama Quotes demonstrates modern Android development implements MVVM architecture

This application allows you to see futurama quotes. You can search quotes according to the character that said it as well. Futurama Quotes demonstrates modern Android development implements MVVM architecture.

 ๐Ÿ—ก๏ธ Deddit demonstrates modern Android development with Hilt, Coroutines, Flow, Jetpack, and Material Design based on MVVM architecture
๐Ÿ—ก๏ธ Deddit demonstrates modern Android development with Hilt, Coroutines, Flow, Jetpack, and Material Design based on MVVM architecture

Deddit demonstrates modern Android development with Hilt, Coroutines, Flow, Jetpack (ViewModel,Paging3), and Material Design based on MVVM

Build with Jetpack Compose & all modern techniques and architecture of android app development
Build with Jetpack Compose & all modern techniques and architecture of android app development

IMDB Movie App Build with Jetpack Compose & all modern techniques and architecture of android app development ScreenShots ๐Ÿ›  Built With ๐Ÿ›  Kotlin - Fi

The complete Android Kotlin Developer course
The complete Android Kotlin Developer course

The complete Android Kotlin Developer course In this course you will learn how to make 17 online games, and apps for Android, using Kotlin. check the

A sample to demonstrate how to use Compose with Ktor Websockets
A sample to demonstrate how to use Compose with Ktor Websockets

This is a sample to demonstrate how to use Compose with Ktor Websockets

ToDo App based on Modern Android Application tech-stacks and MVVM architecture.
ToDo App based on Modern Android Application tech-stacks and MVVM architecture.

ToDo App Task Management App based on Modern Android Application tech-stacks and MVVM architecture. Techs Used ๐Ÿ’ป Kotlin - First class and official pr

Android Multi Theme Switch Library ,use  kotlin language ,coroutine ,and so on ...
Android Multi Theme Switch Library ,use kotlin language ,coroutine ,and so on ...

Magic Mistletoe Androidๅคšไธป้ข˜๏ผˆๆข่‚ค๏ผ‰ๅˆ‡ๆขๆก†ๆžถ ่ƒŒๆ™ฏ ๆ—ถ้š”ๅ››ๅนด๏ผŒๅœจ็ฝ‘ๆ˜“ๆข่‚คไน‹ๅ‰็š„ๆ€่ทฏไธ‹๏ผŒๅšไบ†ๅ‡ ็‚นๆ”น่ฟ›๏ผŒ็ŽฐๅœจๅฎŒๅ…จ้€š่ฟ‡ๅๅฐ„ๅˆ›ๅปบView๏ผŒๅนถไธ”ๅœจSkinLoadManagerไธญๆไพ›ไธ€ไธชconfigCustomAttrsไปฅๆ”ฏๆŒ่‡ชๅฎšไน‰View็š„ๅฑžๆ€งๆ’้˜Ÿๆ›ฟๆข ๆ‘ˆๅผƒไบ†ไน‹ๅ‰็š„AsyncTask

This is a sample app to demonstrate the power of using EventSourced models and the ease with which these can be modelled using Kotlin.
This is a sample app to demonstrate the power of using EventSourced models and the ease with which these can be modelled using Kotlin.

Lego 4 Rent This is a sample app to demonstrate the power of using EventSourced models and the ease with which these can be modelled using Kotlin. To

Kotlin-phoenix - A set of tools aimed to bridge Phoenix with the Kotlin Multiplatform world

Kotlin Phoenix This project is aimed to allow developers to work with Phoenix Ch

Owner
Devrath
Passionate about writing software that solves problems in a creative way
Devrath
A project that showcases best practices for MAD (Modern Android Development).

MAD Dictionary Is this dictionary mad? Well yes, but actually no. MAD = Modern Android Development, this app is built using the very new and very awes

Abhishek Choudhary 11 Mar 12, 2022
๐Ÿ“š Sample Android Components Architecture on a modular word focused on the scalability, testability and maintainability written in Kotlin, following best practices using Jetpack.

Android Components Architecture in a Modular Word Android Components Architecture in a Modular Word is a sample project that presents modern, 2020 app

Madalin Valceleanu 2.3k Oct 3, 2022
A program written entirely in Kotlin using the principles of Clean Architecture according to the MVVM pattern

A program written entirely in Kotlin using the principles of Clean Architecture according to the MVVM pattern. An application that shows a list of ani

Yusuf Ruziev 2 Apr 26, 2022
Kotlin backend based on the Clean Architecture principles. Ktor, JWT, Exposed, Flyway, KGraphQL/GraphQL generated endpoints, Gradle.

Kotlin Clean Architecture Backend Kotlin backend based on the Clean Architecture principles. The application is separated into three modules: Domain,

null 240 Sep 23, 2022
Clean Android multi-module offline-first scalable app in 2022. Including Jetpack Compose, MVI, Kotlin coroutines/Flow, Kotlin serialization, Hilt and Room.

Android Kotlin starter project - 2022 edition Android starter project, described precisely in this article. Purpose To show good practices using Kotli

Krzysztof Dฤ…browski 125 Sep 26, 2022
For Kotlin with SpringBoot project that have multi-module-structure template

Goals kotlin + spring-boot + gradle + multi-module building Module-Structure ---root |--- src.main.kotlin.KotlinSpringbootMultiModuleTemplateAppl

pguma 1 Jul 24, 2022
๐Ÿ›’ Mercado Libre App Clone using modern Android development with Hilt, Coroutines, Jetpack (Room, ViewModel), and Jetpack Compose based on MVVM architecture.

Meli Clone ?? Mercado Libre App Clone using modern Android development with Hilt, Coroutines, Jetpack (Room, ViewModel), and Jetpack Compose based on

Esteban Aragon 6 Sep 7, 2022
FirestoreCleanArchitectureApp is an app built with Kotlin and Firestore that displays data in real-time using the MVVM Architecture Pattern. For the UI it uses Jetpack Compose, Android's modern toolkit for building native UI.

FirestoreCleanArchitectureApp FirestoreCleanArchitectureApp is an app built with Kotlin and Cloud Firestore that displays data in real-time using Andr

Alex 53 Sep 24, 2022
This is an example of a simple application with layered software base on clean-architecture as application architecture and mvvm as presentation architecture

This is an example of a simple application with layered software base on clean-architecture as application architecture and mvvm as presentation archi

null 3 Jul 2, 2021