Самостоятельное создание экземпляра внутри статического метода класса javascript - плохая практика? - PullRequest
0 голосов
/ 10 июля 2019

Это плохой код, использующий OOP JS (это TS)?

class KYC {
 public reference;
 public data = null;

 constructor(id: string) {
   this.reference = id? firestoreAdmin.collection('kyc').doc(id) :
           firestoreAdmin.collection('kyc').doc() :
 }

 async get() {
  const result = await this.reference.get();

  if(!result.exist) throw new Error('not found');

  this.data = result.data;

  return this;
 }

 static async getById(id: string) {
  return await new this(id: string).get();
 }
}

Я написал это так, потому что я нахожу использование new Kyc (id) .get (); несколько нечитаемым внутри экспресса.

также вопрос, это в некотором смысле плохая практика? анти - шаблон?

Любое мнение было бы здорово!

1 Ответ

0 голосов
/ 10 июля 2019

Является ли самоопределение в методе статического класса плохой практикой?

Нет, совсем нет.Вполне нормально использовать статический метод в качестве фабрики.

Странная вещь в вашем коде заключается в том, что вы инициализируете data асинхронно.Это может быть нарочно, но с моей точки зрения класс довольно бесполезен без данных, поэтому я бы предложил сделать это заранее, внутри статического метода:

class KYC {
  constructor(
    public reference,
    public data,
  ) {}

  static async getFromReference(reference) {
    const result = await reference.get();
    if (!result.exist) throw new Error('not found');
    return result.data;
  }
  static async getById(id: string) {
    const reference = firestoreAdmin.collection('kyc').doc(id);
    return new this(reference, await this.getFromReference(reference));
  }

  … // further methods operating on this.data
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...