在 Javascript 中,给静态方法和实例方法同名是否被认为是不好的做法?
假设我有一个表示数据库表 ( Model)的类,并且我想提供 2 个选项来获取某些值:(1) 带有一个 id,(2) 通过一个实例:
class Foo extends Model {
static getById(id) {
return Foo.query().findById(id);
}
static getBars(id, limit, offset) {
return Foo.getById(id).then(foo => foo.getBars(limit, offset));
}
getBars(limit, offset) {
return this.$relatedQuery('bars').range(limit, offset);
}
}
Run Code Online (Sandbox Code Playgroud)
这个例子使用了 Objection JS。
因此,如果您已经有一个Foo被调用的实例foo,则可以直接调用foo.getBars(10, 0),而不是Foo.getBars(fooId, 10, 0).
当它为您简化事情(或显着缩短您的代码或其他东西)时,这很好,但是当然,评估使用两种方法中的哪一种会让人感到困惑。另外,如果我想从 id 中获取 baz和qux 怎么办?如果我使用静态方法,则需要两次访问数据库。因此我宁愿建议使用
class Foo extends Model {
… // constructor
static fromId(id) {
return new this({bar: execute(`select bar from foo where id = ${id}`)});
}
getBaz() {
return getBazFromBar(this.bar);
}
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以做Foo.fromId(…).getBaz()而不是Foo.getBaz(id).
| 归档时间: |
|
| 查看次数: |
1314 次 |
| 最近记录: |