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,任何未在初始化时接收 adapter 的 Deposit 实例
将使用默认适配器
Deposit.defaultAdapter = MemoryDepositAdapter();