Изучение

Начало работы

Создание типизированного DataSourceContainer и Repository, публикующего доменные данные.

v0.1.0-dev.1Начальный уровеньark_data_layer

Начало работы

Установка

Терминал
shell
dart pub add ark_data_layer

Контракт источника

dart
abstract interface class UserRemoteDataSource implements DataSource {
  Future<List<UserDto>> fetchUsers();
}

DataSource — маркерный интерфейс. Приложение определяет полезный контракт и ограничивает его одной технической ответственностью.

Реализация Repository

dart
final class UserRepositoryImpl extends Repository<UsersData>
    implements UserRepository {
  UserRepositoryImpl({required super.dataSources})
    : _remote = dataSources.get<UserRemoteDataSource>(),
      super(initialData: const UsersData.empty());

  final UserRemoteDataSource _remote;

  @override
  Future<void> refresh() async {
    final records = await _remote.fetchUsers();
    setData(UsersData(records.map(mapUser)));
  }
}

Конкретный класс расширяет базовый класс пакета и реализует доменный интерфейс приложения. Вызывающий код зависит от UserRepository, а не от DataSourceContainer.

Композиция и закрытие

dart
final repository = UserRepositoryImpl(
  dataSources: DataSourceContainer(<DataSource>[remoteSource]),
);

await repository.refresh();
await repository.close();
await remoteSource.close();

Repository закрывает собственный механизм публикации, но не закрывает DataSource, которым владеет внешний Scope.

ARKTELOS

Инженерные системы для программного обеспечения, которое обязано выдерживать нагрузку.