我希望使用 Flutter 和 ObjectBox (1.1.1 -> Flutter) 定义最佳开发实践。
我想建立一个由Repository组成的架构来实现对数据库中存储的对象的查询功能。这是一个对象人的示例。存储库主要从 viewModel 调用。
import 'package:flutter_app_best_practice/data/person_repository_interface.dart';
import 'package:flutter_app_best_practice/model/person.dart';
import 'package:flutter_app_best_practice/objectbox.g.dart';
import 'package:objectbox/objectbox.dart';
class PersonRepository implements IPersonRepository{
var _store;
late Box _box;
@override
Future<List<Person>>? getPeople() {
List<Person> list = _box.getAll() as List<Person>;
return Future.value(list);
}
@override
Future<void>? addPerson(String name, int age) async {
Person person = new Person();
person.name = name;
person.age = age;
_box.put(person); // Add
return;
}
@override
Future<void>? initialize() async {
// Future<Store> openStore() {...} is defined in the generated objectbox.g.dart
openStore().then((Store store) {
_store = store;
});
_box = _store.box<Person>();
return;
}
}
这是我的问题:
- 或者使用这种架构调用 _store.close ?
- 与其使用Initialize函数,不如在每次交易之前打开商店,然后在交易完成后关闭商店会更好吗?
- 是否有使用最新版本的 objectBox 的类似结构的示例(使用 openStore ().Then ((Store store))
您如何看待这个实现:
class PersonRepository implements IPersonRepository {
@override
Future<List<Person>>? getPeople() async {
late List<Person> persons;
await openStore().then((Store store) {
var _box = store.box<Person>();
persons = _box.getAll();
store.close();
});
return Future.value(persons);
}
@override
Future<void>? addPerson(String name, int age) async {
await openStore().then((Store store) {
var _box = store.box<Person>();
Person person = new Person();
person.name = name;
person.age = age;
_box.put(person); // Add
store.close();
});
return;
}
}
或者使用这种架构调用 _store.close ?
你可以忽略Store.close()
在正常应用程序中,没有过多的后台操作。
与其使用Initialize函数,不如在每次交易之前打开商店,然后在交易完成后关闭商店会更好吗?
不,开一家商店的成本“相当”高,所以你不应该在每次访问商店时都这样做——这只会减慢你的速度,而且没有任何好处。
是否有使用最新版本的 objectBox 的类似结构的示例(使用 openStore ().Then ((Store store))
objectbox 包本身有一个示例,尽管代码结构不同:https://github.com/objectbox/objectbox-dart/blob/main/objectbox/example/flutter/objectbox_demo/lib/main.dart#L79
举一个例子,在保持代码尝试执行的抽象级别的同时,您可以做什么:
class PersonRepository implements IPersonRepository {
final Store _store;
final Box<Person> _box;
PersonRepository(this._store) : _box = _store.box() {}
@override
Future<List<Person>>? getPeople() {
List<Person> list = _box.getAll() as List<Person>;
return Future.value(list);
}
@override
Future<void>? addPerson(String name, int age) async {
Person person = new Person();
person.name = name;
person.age = age;
_box.put(person); // Add
return;
}
}
abstract class IDatabaseRepositories {
IPersonRepository get people;
}
class ObjectBoxRepositories implements IDatabaseRepositories {
final Store _store;
final PersonRepository people;
static Future<IDatabaseRepositories> create() async =>
ObjectBoxRepositories._(await openStore());
ObjectBoxRepositories._(this._store) : people = PersonRepository(_store);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)