正如标题所述,可以说我有一个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);
};
}
谢谢您的提示:)
答案 0 :(得分:0)
方法1看起来很好。首先,您需要考虑的是公共合同。一些公共职能部门是否在内部使用另一个公共部门-不重要。您仍然需要测试覆盖每个公共API。
p.s。在一个类中拥有20-30个公共方法-是重新考虑设计并将类拆分为多个类/模块以符合Single Responsibility Principle的好时机:)