Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Proposed solution for Book list challenge #12

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

ridgetechai
Copy link

@ridgetechai ridgetechai commented Sep 4, 2024

WhatsApp Image 2024-09-04 at 15 06 48

tab_screenshot

WhatsApp.Video.2024-09-04.at.15.09.15.mp4
Screenshot 2024-09-04 at 2 31 36 PM

Tech stack and architecture:

Dagger
Room(for offline support)
Retrofit
Glide
MVP + Clean architecture
Mockito
Coroutines

App is divider into following layers to satisfy clean architecture principals:

  • Data : The Data Layer is responsible for handling data sources such as APIs, databases(Room), or any external service. It implements the repository interfaces defined in the Domain Layer and provides concrete implementations for data retrieval, caching, and storage.

  • Domain: The Domain Layer is the core of the application and contains the business logic. This layer is independent of any external framework or platform, making it reusable and testable. It defines the essential rules that govern the application.

  • Presentation: The Presentation Layer is responsible for handling the UI and interaction with the user. It contains UI-related logic and interacts with the Domain Layer via Use Cases.

Additional things considered while designing:

  • App use Room for offline storage so that we can show previously fetched data.
  • Used adapter delegation pattern that can be used for other adapters in future.
  • MVP is used at presentation layer to satisfy requirements in problem statement.
  • Unit test setup done for presenter to showcase implementation. However we can develop extended test suite and write separate test for domain and data layer.
  • Build flavours added to generate builds with different configurations.
  • We can create multi-module app following same architecture as app grows.

Further improvements:

  • Write CI/CD with github actions and fastlane. We can integrate google play test track with fastlane to support ease of delivery to stakeholders/qa.
  • As app grows, add security for data layer(Room) using encryption and decryption techniques.
  • Use of Compose for UI to remove boilerplate code from xmls.
  • Maybe consider MVVM architecture for presentation layer to take leverage of latest android components.
  • Modularize app and separate library, core and feature modules.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant