Interview test reference: https://gist.github.com/cloudwalk-tests/68db9331919d02c16b1e05c5daa0364f
This repository contains the implementation of a mobile application following the Clean Architecture principles. The architecture is organized into separate layers to ensure modularity, maintainability, and testability. Below is a step-by-step guide outlining the key aspects of the project development.
git clone --recurse-submodules https://github.com/KevinKobori/cloudwalk_interview.git
cd nasa_apod_app
dart run build_runner build --delete-conflicting-outputs
flutter run
cd nasa_apod_app
dart run build_runner build --delete-conflicting-outputs
flutter run -d chrome --web-renderer html
In this phase, the project's use cases are defined. Usecases represent the high-level functionalities of the application. Each use case describes a specific action or behavior that the application must support.
BDD scenarios are created to specify the expected behavior of the application in various scenarios. These scenarios help ensure that the development process aligns with the desired outcomes and requirements.
TDD scenarios are derived from the BDD scenarios. These scenarios are transformed into test cases that drive the development process. Each test case corresponds to a specific use case and serves as a blueprint for writing code.
Based on the TDD scenarios, the implementation of each use case is carried out. The implementation process focuses on fulfilling the requirements outlined in the scenarios, ensuring that the code meets the expected functionality.
The domain layer contains the core business logic of the application. It defines entities, use case interfaces, and business rules. This layer is independent of external frameworks and technologies.
The data layer is responsible for data management and storage. It implements the use case interfaces defined in the domain layer and interacts with data sources such as databases, APIs, or repositories.
The infrastructure layer provides the necessary tools and libraries to support the application's operation. It includes implementations of data sources, networking components, and other technical infrastructure details.
The external layer encompasses external dependencies, such as third-party libraries, frameworks, and services. This layer encapsulates the interactions with external components, promoting loose coupling and maintainability.
The presentation layer handles the user interface and user interaction. It includes components for displaying information and receiving user input. This layer communicates with the domain layer through use case interfaces.
The main layer serves as the entry point of the application. It initializes the necessary components, sets up dependency injection, and coordinates the interactions between different layers.
By organizing the project into these distinct layers, the Clean Architecture approach promotes code separation, reusability, and testability. This structure enables the development team to make changes to specific parts of the application without affecting the entire system.
Feel free to explore each layer in detail within the repository to understand how the architecture is implemented and how the different components interact.
For any questions or assistance, please contact Kevin Kobori at [email protected].