mirror of
https://github.com/immich-app/immich.git
synced 2025-05-24 01:12:58 -04:00
* refactor(mobile): migrate store * refactor(mobile): expand abbreviations * chore(mobile): fix lint --------- Co-authored-by: shenlong-tanwen <139912620+shalong-tanwen@users.noreply.github.com> Co-authored-by: Alex <alex.tran1502@gmail.com>
31 lines
1.3 KiB
Markdown
31 lines
1.3 KiB
Markdown
# Infrastructure Layer
|
|
|
|
This directory contains the infrastructure layer of Immich. The infrastructure layer is responsible for the implementation details of the app. It includes data sources, APIs, and other external dependencies.
|
|
|
|
## Structure
|
|
|
|
- **[Entities](./entities/)**: These are the classes that define the database schema for the domain models.
|
|
- **[Repositories](./repositories/)**: These are the actual implementation of the domain interfaces. A single interface might have multiple implementations.
|
|
- **[Utils](./utils/)**: These are utility classes and functions specific to infrastructure implementations.
|
|
|
|
```
|
|
infrastructure/
|
|
├── entities/
|
|
│ └── user.entity.dart
|
|
├── repositories/
|
|
│ └── user.repository.dart
|
|
└── utils/
|
|
└── database_utils.dart
|
|
```
|
|
|
|
## Usage
|
|
|
|
The infrastructure layer provides concrete implementations of repository interfaces defined in the domain layer. These implementations are exposed through Riverpod providers in the root `providers` directory.
|
|
|
|
```dart
|
|
// In domain/services/user.service.dart
|
|
final userRepository = ref.watch(userRepositoryProvider);
|
|
final user = await userRepository.getUser(userId);
|
|
```
|
|
|
|
The domain layer should never directly instantiate repository implementations, but instead receive them through dependency injection. |