How nerojust/clean-architecture-android works
This is an Android GitHub repository browser: users search GitHub, browse results, and open a repository detail screen. Navigation routes list selections into detail; each feature’s MVI ViewModel invokes a domain use case, which accesses the repository abstraction. The data implementation calls GitHub’s API and maps responses into domain models. The README documents these architectural boundaries and the MVI flow; some feature, DI, and network internals were not sampled, so uncertain wiring is omitted.
Main entry points: GitHubRepoRepositoryImpl.kt GitHub Repository · RepoListScreen.kt Repository List UI · AppNavHost.kt App Navigation · GitHubApiService.kt GitHub API Service
Components 21
App Shell
- Main Activity
app/src/main/java/com/nerojust/clean_architecture/MainActivity.kt - App Navigation
app/src/main/java/com/nerojust/clean_architecture/navigation/AppNavHost.kt
Browse Features
- Repository List UI
feature/repolist/src/main/kotlin/com/nerojust/clean_architecture/feature/repolist/RepoListScreen.kt - List ViewModel
feature/repolist/src/main/kotlin/com/nerojust/clean_architecture/feature/repolist/RepoListViewModel.kt - List MVI Contract
feature/repolist/src/main/kotlin/com/nerojust/clean_architecture/feature/repolist/RepoListContract.kt - Repository Detail UI
feature/repodetail/src/main/kotlin/com/nerojust/clean_architecture/feature/repodetail/RepoDetailScreen.kt - Detail ViewModel
feature/repodetail/src/main/kotlin/com/nerojust/clean_architecture/feature/repodetail/RepoDetailViewModel.kt - Detail MVI Contract
feature/repodetail/src/main/kotlin/com/nerojust/clean_architecture/feature/repodetail/RepoDetailContract.kt
Domain Layer
- Search Use Case
domain/src/main/kotlin/com/nerojust/clean_architecture/domain/usecase/SearchReposUseCase.kt - Detail Use Case
domain/src/main/kotlin/com/nerojust/clean_architecture/domain/usecase/GetRepoDetailUseCase.kt - Repository Contract
domain/src/main/kotlin/com/nerojust/clean_architecture/domain/repository/RepoRepository.kt - Repository Model
domain/src/main/kotlin/com/nerojust/clean_architecture/domain/model/Repo.kt
Data Access
- GitHub Repository
data/src/main/kotlin/com/nerojust/clean_architecture/data/GitHubRepoRepositoryImpl.kt - DTO Mapper
data/src/main/kotlin/com/nerojust/clean_architecture/data/mapper/RepoMapper.kt
Shared Platform
- GitHub API Service
core/network/src/main/kotlin/com/nerojust/clean_architecture/core/network/GitHubApiService.kt - Network Factory
core/network/src/main/kotlin/com/nerojust/clean_architecture/core/network/NetworkFactory.kt - Repository DTOs
core/network/src/main/kotlin/com/nerojust/clean_architecture/core/network/dto/RepoDto.kt - Dispatcher Provider
core/common/src/main/kotlin/com/nerojust/clean_architecture/core/common/DispatcherProvider.kt - State Components
core/ui/src/main/kotlin/com/nerojust/clean_architecture/core/ui/component/StateComposables.kt
Other components
- App User
- GitHub API
Connections 24
- App User → Main Activity: opens app
- Main Activity → App Navigation: shows host
- App Navigation → Repository List UI: starts list
- Repository List UI → List ViewModel: sends intents
- List ViewModel → List MVI Contract: reduces state
- Repository List UI → State Components: renders states
- List ViewModel → Search Use Case: invokes search
- Repository List UI → App Navigation: opens selection
- App Navigation → Repository Detail UI: routes owner/name
- Repository Detail UI → Detail ViewModel: sends load
- Detail ViewModel → Detail MVI Contract: reduces state
- Repository Detail UI → State Components: renders states
- Detail ViewModel → Detail Use Case: loads repository
- Search Use Case → Repository Contract: searches repos
- Detail Use Case → Repository Contract: gets repository
- GitHub Repository → Repository Contract: implements
- GitHub Repository → GitHub API Service: requests data
- GitHub Repository → Dispatcher Provider: uses IO context
- GitHub Repository → DTO Mapper: maps responses
- DTO Mapper → Repository DTOs: maps from DTO
- DTO Mapper → Repository Model: creates model
- GitHub API Service → Repository DTOs: returns DTOs
- GitHub API Service → GitHub API: calls endpoints
- Network Factory → GitHub API Service: creates service