Одновременное использование и совместное использование публичных методов - правильный подход?

Как сказано в заголовке, допустим, у меня есть class со многими methods и 80% из них:

  • Мне нужно установить также как общедоступный (функциональность 1: 1)
  • Они используют друг друга

Какой подход лучше всего с точки зрения расширения и тестирования в будущем? Конечно, приведенные ниже примеры тривиальны, но предположим, что у меня есть класс с 20-30 методами внутри. Если поможет, то проект написан на ReactJS.

Подход 1:

Для меня это самый быстрый подход.

  • Без повторения кода
  • Я использую functions внутри class, а также делюсь внешними
  • Некоторые функции зависят от других

class Approach1 {
  names = [];

  /* Establish methods for users also */
  publicApi = {
    check: this.check,
    setValue: this.setValue
  };

  /**
   * Public method 1
   * @public
   * @param {string} name
   * @returns {boolean}
   */
  check = name => name === "foo";

  /**
   * Public method 2 using internally method 1
   * @public
   * @param {string} name
   * @returns {boolean}
   */
  setValue = name => {
    if (this.check(name)) names.push(name);
  };
}

Подход 2:

Не думаю, что такой подход хорош.

  • Повторение кода
  • Я использую functions внутри class, а также делюсь внешними
  • Функции, не зависящие друг от друга

class Approach2 {
  names = [];

  /* Establish methods for users also */
  publicApi = {
    check: this.check,
    setValue: this.setValue
  };

  /**
   * Public method 1
   * @public
   * @param {string} name
   * @returns {boolean}
   */
  check = name => name === "foo";

  /**
   * Public method 2 with own implementation
   * @public
   * @param {string} name
   * @returns {boolean}
   */
  setValue = name => {
    if (name === "foo") names.push(name);
  };
}

Подход 3:

Такой подход выглядит лучше, но я вижу много дополнительного кода.

  • Дополнительный код (мне нужно инкапсулировать почти каждый частный метод)
  • Я разделяю один и тот же functions на частный и публичный
  • Частные method могут зависеть друг от друга
  • Публичный methods всегда зависит от частного methods

class Approach3 {
  names = [];

  /* Establish methods for users also */
  publicApi = {
    check: this.check,
    setValue: this.setValue
  };

  /**
   * Private method 1
   * @private
   * @param {string} name
   * @returns {boolean}
   */
  _check = name => name === "foo";

  /**
   * Private method 2
   * @private
   * @param {string} name
   */
  _setValue = name => {
    if (this._check(name)) names.push(name);
  };

  /**
   * Public method 1 (encapsulating private method)
   * @public
   * @param {string} name
   * @returns {boolean}
   */
  check = name => _check(name);

  /**
   * Public method 2 (encapsulating private methods 1 and 2)
   * @public
   * @param {string} name
   */
  setValue = name => {
    if (this._check(name)) this._setValue(name);
  };
}

Спасибо за любые советы :)

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Подход 1 выглядит совершенно нормально. В первую очередь нужно думать - это публичный договор. Использует ли какая-то публичная функция другой публичный внутри или нет - неважно. Поскольку вам все еще нужно покрыть тестами каждую часть общедоступного API.

p.s. наличие 20-30 общедоступных методов внутри одного класса - хорошее время, чтобы переосмыслить дизайн и разделить класс на несколько классов / модулей в соответствии с Принцип единой ответственности :)

Другие вопросы по теме