AlexeySAntonov / Grocery

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Build Test

Grocery

A shopping list application.
The application makes everyday shopping easier by enabling the user to list down items to buy.
While shopping, the application also helps to track items that are already collected.

Architecture

Vertically

MVVM + Clean

Horizontally

Multi-module: Core modules and Feature modules weakly connected by Dagger.

BuildSrc module

Java module with global const dependencies and versions.
Visible for all other modules.

APP module

Main module of the application responsible for "gluing" feature modules and providing single activity as navigation host.

CORE-UI-BASE module

Contains all the basic/reusable classes for work with UI, useful extensions, helpers and shared XML resources as well.
Visible for all feature modules.

CORE-UI-MODEL

Contains all the UI models both specific and shared.
Visible for all feature modules through transitive dependency in the CORE-UI-BASE module.

CORE-MODEL

Contains all the business models both specific and shared.
In this case as an exception contains DTOs as well.
Visible for all feature modules through transitive dependency in the CORE-UI-MODEL module.
Visible for database CORE-DB-API and CORE-DB-IMPL modules through transitive dependency in the CORE-DB-ENTITY module.

CORE-DB-API

API which provides *Store(s) for interaction with both local and remote databases.
Visible for all feature modules.

CORE-DB-IMPL

Stores and databases implementation.
Visible only for the App module.

CORE-DB-ENTITY

Contains all the database models and mappers.
Visible only for CORE-DB-API and CORE-DB-IMPL

CORE-NAVIGATION

Provides basic functionality and transitions for navigation.
GlobalRouter is responsible for handling global navigation commands and sends them to registered local Navigator if needed.
Navigator is responsible for handling local navigation commands through Navigation.
GlobalRouter is visible for all feature modules, but navigator implementation is hidden.

CORE-DI

Provides common DI annotations and GlobalFeatureProvider.
In the same time, features' screens implementation inside GlobalFeatureProvider are hidden by platform androidx.fragment.app.Fragment.

MODULE-INJECTOR

Provides useful abstractions for storing and recreation DI components.

FEATURE-TROLLEYLIST-API

Entry point for interaction with TrolleyList flow.
Can be visible for all interested modules.

FEATURE-TROLLEYLIST-IMPL

Hidden implementation of the feature (Trolleys' list and Trolley create screens).
Visible only for APP module for "gluing".

FEATURE-TROLLEYDETAILS-API

Entry point for interaction with TrolleyDetails flow.
Can be visible for all interested modules.

FEATURE-TROLLEYDETAILS-IMPL

Hidden implementation of the feature (TrolleyDetails screen).
Visible only for APP module for "gluing".

Screenshots