Flutter持久化服务插件pip_services4_persistence的使用
Flutter持久化服务插件pip_services4_persistence的使用
此模块是多语言微服务工具包Pip.Services的一部分。它包含数据访问组件的一般接口以及内存和文件持久化的抽象实现。
持久化组件分为两种。第一种是基本持久化,可以处理任何对象类型,并只提供一组基本操作。第二种是所谓的“可识别”持久化,适用于具有唯一ID字段的对象。可识别持久化提供了完整的CRUD操作集,涵盖了大多数常见情况。
该模块包含以下包:
- Read - 通用数据读取接口。
- Write - 通用数据写入接口。
- Persistence - 内存和文件持久化组件,以及JSON持久器类。
使用
在你的包的pubspec.yaml
文件中添加以下依赖:
dependencies:
pip_services4_persistence: version
现在你可以从命令行安装包:
pub get
例如,你需要为定义的数据对象实现持久化。
import 'package:pip_services4_data/src/data/IIdentifiable.dart';
class MyObject implements IIdentifiable<String> {
@override
String? id;
String key;
String value;
MyObject({String? id, required this.key, required this.value})
: id = id;
void fromJson(Map<String, dynamic> json) {
id = json['id'];
key = json['key'];
value = json['value'];
}
}
我们的持久化组件应实现以下接口,其中包含一组基本的CRUD操作。
abstract class IMyPersistence {
void getPageByFilter(IContext? context, FilterParams filter, PagingParams paging);
MyObject? getOneById(IContext? context, String id);
MyObject? getOneByKey(IContext? context, String key);
MyObject create(IContext? context, MyObject item);
MyObject update(IContext? context, MyObject item);
MyObject deleteById(IContext? context, String id);
}
要实现内存持久化组件,你应该继承IdentifiableMemoryPersistence
。
大多数CRUD操作将来自基类。你只需要覆盖getPageByFilter
方法并自定义过滤函数。
并且实现一个getOneByKey
自定义持久化方法,该方法在基类中不存在。
import 'package:pip_services4_persistence/src/persistence/IdentifiableMemoryPersistence.dart';
import 'package:pip_services4_data/src/query/FilterParams.dart';
import 'package:pip_services4_data/src/query/PagingParams.dart';
class MyMemoryPersistence extends IdentifiableMemoryPersistence<MyObject, String> {
MyMemoryPersistence() : super();
@override
Function(MyObject) composeFilter(FilterParams filter) {
filter = filter ?? FilterParams();
String id = filter.getAsNullableString("id");
String tempIds = filter.getAsNullableString("ids");
List<String> ids = tempIds != null ? tempIds.split(",") : null;
String key = filter.getAsNullableString("key");
return (item) {
if (id != null && item.id != id)
return false;
if (ids != null && ids.indexOf(item.id) < 0)
return false;
if (key != null && item.key != key)
return false;
return true;
};
}
@override
Future<DataPage<MyObject>> getPageByFilter(IContext? context, FilterParams filter, PagingParams paging) {
return super.getPageByFilterEx(context, composeFilter(filter), paging, null);
}
@override
Future<MyObject?> getOneByKey(IContext? context, String key) async {
final item = this._items.firstWhere(
(item) => item.key == key,
orElse: () => null,
);
if (item != null) {
this._logger.trace(context, "Found object by key=%s", key);
} else {
this._logger.trace(context, "Cannot find by key=%s", key);
}
return item;
}
}
通过向已实现的内存持久化组件添加持久器对象,可以轻松创建文件持久化。
import 'package:pip_services4_data/src/query/ConfigParams.dart';
import 'package:pip_services4_persistence/src/persistence/JsonFilePersister.dart';
class MyFilePersistence extends MyMemoryPersistence {
JsonFilePersister<MyObject> _persister;
MyFilePersistence([String? path]) : super() {
this._persister = JsonFilePersister<MyObject>(path ?? "./data/data.json");
this._loader = this._persister;
this._saver = this._persister;
}
@override
void configure(ConfigParams config) {
super.configure(config);
this._persister.configure(config);
}
}
更多关于Flutter持久化服务插件pip_services4_persistence的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter持久化服务插件pip_services4_persistence的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
pip_services4_persistence
是一个用于在 Flutter 应用程序中实现数据持久化的插件。它是 pip_services4
微服务工具包的一部分,提供了一组用于管理数据持久化的组件和工具。这个插件支持多种持久化后端,包括内存、文件、数据库等,并且提供了统一的接口来操作这些后端。
以下是如何在 Flutter 项目中使用 pip_services4_persistence
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 pip_services4_persistence
插件的依赖:
dependencies:
flutter:
sdk: flutter
pip_services4_persistence: ^0.0.1
然后运行 flutter pub get
来安装依赖。
2. 创建持久化服务
你可以使用 MemoryPersistence
类来创建一个内存持久化服务。这个类实现了 ICrud
接口,提供了基本的 CRUD 操作。
import 'package:pip_services4_persistence/pip_services4_persistence.dart';
class MyData {
String id;
String name;
MyData({required this.id, required this.name});
}
void main() {
// 创建内存持久化服务
var persistence = MemoryPersistence<MyData>();
// 添加数据
var data = MyData(id: '1', name: 'Data 1');
persistence.create(null, data);
// 查询数据
var result = persistence.getOneById(null, '1');
print(result.name); // 输出: Data 1
// 更新数据
data.name = 'Updated Data 1';
persistence.update(null, data);
// 删除数据
persistence.deleteById(null, '1');
}
3. 使用其他持久化后端
pip_services4_persistence
插件支持多种持久化后端,例如文件、数据库等。你可以根据需要选择合适的后端,并使用相应的类来创建持久化服务。
例如,使用 JsonFilePersistence
类来实现基于文件的持久化:
import 'package:pip_services4_persistence/pip_services4_persistence.dart';
class MyData {
String id;
String name;
MyData({required this.id, required this.name});
}
void main() {
// 创建文件持久化服务
var persistence = JsonFilePersistence<MyData>('data.json');
// 添加数据
var data = MyData(id: '1', name: 'Data 1');
persistence.create(null, data);
// 查询数据
var result = persistence.getOneById(null, '1');
print(result.name); // 输出: Data 1
// 更新数据
data.name = 'Updated Data 1';
persistence.update(null, data);
// 删除数据
persistence.deleteById(null, '1');
}
4. 配置持久化服务
你可以使用 ConfigParams
类来配置持久化服务的参数。例如,配置 JsonFilePersistence
的文件路径:
import 'package:pip_services4_persistence/pip_services4_persistence.dart';
import 'package:pip_services4_components/pip_services4_components.dart';
class MyData {
String id;
String name;
MyData({required this.id, required this.name});
}
void main() {
// 配置参数
var config = ConfigParams.fromTuples([
'path', 'data.json'
]);
// 创建文件持久化服务
var persistence = JsonFilePersistence<MyData>();
persistence.configure(config);
// 添加数据
var data = MyData(id: '1', name: 'Data 1');
persistence.create(null, data);
// 查询数据
var result = persistence.getOneById(null, '1');
print(result.name); // 输出: Data 1
// 更新数据
data.name = 'Updated Data 1';
persistence.update(null, data);
// 删除数据
persistence.deleteById(null, '1');
}
5. 使用过滤器
pip_services4_persistence
插件还支持使用过滤器来查询数据。你可以使用 FilterParams
和 SortParams
类来创建过滤器和排序条件:
import 'package:pip_services4_persistence/pip_services4_persistence.dart';
import 'package:pip_services4_data/pip_services4_data.dart';
class MyData {
String id;
String name;
MyData({required this.id, required this.name});
}
void main() {
// 创建内存持久化服务
var persistence = MemoryPersistence<MyData>();
// 添加数据
persistence.create(null, MyData(id: '1', name: 'Data 1'));
persistence.create(null, MyData(id: '2', name: 'Data 2'));
persistence.create(null, MyData(id: '3', name: 'Data 3'));
// 使用过滤器查询数据
var filter = FilterParams.fromTuples([
'name', 'Data 1'
]);
var result = persistence.getPageByFilter(null, filter, null);
print(result.data.length); // 输出: 1
}