Deposit

一个与数据后端无关的 Dart 和 Flutter 存储库模式包。


概述

该软件包的目的是提供一个与任何给定数据无关的存储库模式
后端。

这种设计模式(源自领域驱动设计
有助于编写数据层,而无需了解数据后端。
该软件包将模式的所有方面抽象为单一的、一致的 API。

Entity

Entity 类是存储库模式数据模型部分的基础。该类定义了
如何从后端读取数据,并作为数据在后端中的引用。

定义实体

class MovieEntity extends Entity {
  MovieEntity({
    this.id,
    required this.title,
  });

  factory MovieEntity.fromJSON(Map<String, dynamic> data) {
    return MovieEntity(
      id: data['id'] as int?,
      title: data['title'] as String? ?? 'No title',
    );
  }

  int? id;

  String title;

  @override
  Map<String, dynamic> toJSON() {
    return <String, dynamic>{
      'id': id,
      'title': title,
    };
  }

  @override
  String toString() => 'Movie(id: $id, title: $title)';
}

Deposit

Deposit 是一个为存储库模式提供单一、一致 API 的类。它使用
Entity 作为关系,以了解如何读取和写入数据到任何给定的数据后端。

Deposit 类引用数据后端中的表/集合,并从中读取
和写入数据。

创建 Deposit

您可以通过两种方式创建 Deposit。第一种是继承该类
本身,这允许添加针对任何特定用例定制的自定义方法

class MovieDeposit extends Deposit<MovieEntity, int> {
  MovieDeposit() : super('movies', MovieEntity.fromJSON, adapter: OptionalDepositAdapter());
}

Deposit 类也可以直接使用,虽然不推荐,但也没有
任何反对之处

final movieDeposit = Deposit<MovieEntity, int>('movies', MovieEntity.fromJSON);

DepositAdapter

DepositAdapter 是一个无关的类,它定义了 Deposit 实例应如何与
数据后端通信。默认情况下,Deposit 实例将使用 Deposit.defaultAdapter,除非在初始化时传递了适配器

deposit 包带有一个名为 MemoryDepositAdapter 的内存适配器。但是,默认情况下
没有设置适配器,这应该由包用户明确设置。

以下数据后端均受官方支持

设置默认适配器

通过设置 Deposit.defaultAdapter,任何未在初始化时接收 adapterDeposit 实例
将使用默认适配器

Deposit.defaultAdapter = MemoryDepositAdapter();

GitHub

查看 Github