我想最好的(唯一?)方法是为嵌套结构创建一个单独的框,然后创建从父级(ONE)到子级(MANY)的关系。
但是,我的问题是如何实现.toObjectBox()
将我的域数据模型转换为 ObjectBox 数据模型的方法。dartz 包中是否有类似Either
的东西(返回左侧或右侧对象),它同时传输 2 个对象?
所以使用 ObjectBox 实体
@Entity()
class Customer {
int id;
@Backlink('customer')
final orders = ToMany<Order>();
}
@Entity()
class Order {
int id;
final customer = ToOne<Customer>();
}
我会将父级(客户)与嵌套数据反对(订单)存储在 2 个相关框中
Customer customer = domainData.toObjectBox; // but how to get the order out?
customer.orders.add(Order('Order 1')); // shouldn't this be Order(1)?
final customerId = store.box<Customer>().put(customer);
这就是我通常实现该toObjectBox
方法的方式。在这里,您会看到这行不通,因为我必须将父级和嵌套的子级分开。虽然我想我可以用一些意大利面条来实现这一点,但我想知道是否有一种聪明的方法可以做到这一点,因为我想这应该是一种常见的模式(尽管我还没有找到任何关于它的问答)。
@Entity()
Customer {
int id;
List<Order> orders;
Customer({required this.id, required this.orders});
CustomerObox toObjectBox() {
return CustomerObox(
id: id,
// orders: orders.map((x) => x.toObjectBox()).toList()
);
}
=== 更新 ======================================
与此同时,我尝试自己创建一个回报结构,现在我正在努力让它发挥作用。
class Pair<T1, T2> {
final T1 parent;
final T2 child;
Pair({required this.parent, required this.child});
}
@Entity()
class Customer {
int id;
List<Order> orders;
Customer({required this.id, required this.orders});
static Pair<CustomerObox, List<OrderObox>> toObjectBox(Customer cust) {
Pair<CustomerObox, List<OrderObox>>(
parent: CustomerObox(
id: cust.id,
),
child: cust.orders.map((o) => o.toObjectBox()).toList()
);
}
}