Flutter持久化服务插件pip_services4_persistence的使用

Flutter持久化服务插件pip_services4_persistence的使用

Pip.Services Logo

此模块是多语言微服务工具包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

1 回复

更多关于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 插件还支持使用过滤器来查询数据。你可以使用 FilterParamsSortParams 类来创建过滤器和排序条件:

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
}
回到顶部