Создайте пакет, не полагаясь на один экземпляр класса WriteBatch - PullRequest
1 голос
/ 10 марта 2020

Я хотел бы создать набор пакетных действий, используя функции, которые не зависят от одного экземпляра 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.

Я хочу удалить эту зависимость, поскольку она нарушает принцип чистого кода для функций monadi c (избегайте используя выходные аргументы). Возможно ли это с помощью SDK?

1 Ответ

1 голос
/ 10 марта 2020

Вам нужно будет использовать WriteBatch. Нет альтернативы написанию пакета Firestore, который избегает этой конструкции. Он всегда будет где-то там.

Вместо этого, если вы пытаетесь разделить проблемы, вы можете создать собственную пакетную абстракцию / инкапсуляцию (возможно, объект-обертку), которая не раскрывает ни одного из API-интерфейсы Firestore внешне, но использует их внутренне. Вы можете передавать объекты-обертки, и ваш код будет работать так, как вы считаете приемлемым. Похоже, вы немного начали с BaseBatchAction, но я думаю, что вам нужно будет сделать большую абстракцию, чтобы абстрагировать весь пакет, а не только отдельные изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...