Skip to content

Application Architecture

The app follows feature driven design and domain driven design principles. The app is divided into multiple features, each feature is a separate module. Each module contains its own business logic, UI, and data layer. The modules are independent of each other and can be developed, and tested, separately.

Project structure

The project structure is as follows:

├── feature
│   ├── application
|   |   ├── feature_cubit.dart
|   |   ├── feature_state.dart
│   ├── domain
|   |   ├── entities
|   |   |   ├── feature_entity.dart
|   |   ├── repositories
|   |   |   ├── i_feature_repository.dart
│   ├── infrastructure
|   |   ├── feature_repository_impl.dart
│   └── presentation
|       ├── pages
|       |   ├── feature_page.dart
|       ├── components
|       |   ├── feature_widget.dart
└── configure_dependencies.dart
  • feature - Contains the feature module.
    • application - Contains the state management logic of the feature.
    • domain - Contains the entities and repositories/contracts of the feature.
    • infrastructure - Contains the implementation of the repositories.
    • presentation - Contains the UI of the feature.

Domain Driven Design