Как сказано в заголовке, допустим, у меня есть class со многими methods и 80% из них:
Какой подход лучше всего с точки зрения расширения и тестирования в будущем? Конечно, приведенные ниже примеры тривиальны, но предположим, что у меня есть класс с 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);
};
}
Спасибо за любые советы :)



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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