【发布时间】:2020-03-10 03:07:31
【问题描述】:
我想使用不依赖于单个 WriteBatch 实例的函数来构建一组批处理操作。现在,我必须将 WriteBatch 类的一个实例传递给函数,然后这些函数可以在批处理上调用 .set() 或 .update() 或 .delete() 函数。
以我的代码为例:
export class BatchHelperService {
constructor(private afStore: AngularFirestore) { }
executeBatchActions(batchActions: BaseBatchAction[]): Observable<void> {
const batch = this.afStore.firestore.batch();
batchActions.forEach(action => action.attachActionToBatch(batch));
return from(batch.commit());
}
}
我这里有一个函数,它接受基类BaseBatchAction 的数组。我有三个派生类,代表三种批处理操作类型(设置、更新、删除)。它们都实现了attachActionToBatch() 函数,但它依赖于传入一个已经创建的WriteBatch 对象。
我想删除此依赖项,因为它违反了 monadic 函数的干净代码原则(避免使用输出参数)。 SDK可以做到这一点吗?
【问题讨论】:
-
虽然您可以让
action.attachActionToBatch()接受一个或不接受参数,并根据需要创建批处理,但它将在哪里获取firestore实例以首先创建批处理以及如何你打算在批处理中链接多个操作?我相信您现在拥有的代码是您可以使用的最易理解的代码。只要你的抽象 API 是可以理解的并且遵循单子范式,我不明白为什么实现它的代码也必须是单子的。
标签: angular typescript firebase google-cloud-firestore