CleanArchitectureApp
CleanArchitectureApp copied to clipboard
A Clean Architecture App that uses feature Modularization Architecture (app, presentation, domain, data, buildSrc) modules to hit TMDB API using MVVM Architecture, Coroutines, Retrofit2, Pagination, L...
Android Kotlin Clean Architecture App
A Clean Architecture App that uses feature Modularization Architecture (app, presentation, domain, data, buildSrc) modules to hit TMDB API using MVVM Architecture, Coroutines, Retrofit2, Pagination, Live Data, Data Binding, Koin, SOLID Principles, Unit Testing using MockK and UI Testing using Espresso.
Introduction
Layers
UI or Presentation Layer
- This layer has all the Android UI components like Activities, Fragments, ViewModels, etc.
Domain Layer
- Contains all the business logic of the app. This layer has no Android components in it.
Data Layer
- All components related to data such as database, networking, api, shared preferences. It is an Android specific layer.
Modules
App Module
- Considered as entery point for the app
- Contains (Activity) that hosts presentation view
- Contatins BaseApplication and all needed app info
Domain Module
- Contains business model
- Contains business USECASES
- Repository interface
Data Module
- Repository Implementation
- Executor API data
- Mapper data model to domain model
- Contains data service, third party data service
Presentation Module
- View (Fragment/Layout) Adapt data to view
- Follows MVVM Architecture
- Mapper domain model to presentation model
- Handle data input from view via UseCase
BuildSrc Module
- Allows organizing gradle dependencies between all modules by using KTS
Unit Test
You can easily write Unit Test up to 70% code coverage lines of code (LOC), if you write focus on
- Data: RepositoryImpl, Model Mapper
- Domain: UseCases
- Presentation: ViewModel, Model Mapper
License
Copyright (C) 2021 Shehab Alaa
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.