2017-11-22 7 views
0

Javascriptでは、静的メソッドとインスタンスメソッドに同じ名前を付けるのは悪い習慣と考えられますか?Javascript - 静的メソッドとインスタンスメソッドの同じ名前の悪い練習ですか?

Iは、データベーステーブル(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); 
    } 

} 

この例では、Objection JSを使用しています。

fooという名前のインスタンスが既にFooの場合は、Foo.getBars(fooId, 10, 0)ではなくfoo.getBars(10, 0)を呼び出すことができます。

+0

jQueryでは '$ .each()'と '$(selector).each()'のような意味ですか? – Barmar

+1

あなたのオブジェクトは、インスタンスとしても、静的クラスとしても使えるのですか? *それは私が考え始めようとしているものです... – deceze

+0

私はこれをやることに利益が見られません。 – Amy

答えて

1

物事を簡素化したり、コードや何かをかなり短くしたりすると問題はありませんが、どちらの方法を使って評価するのが紛らわしいのですか。また、もし私がバスクを取得したいのであれば、のIDからqux?静的メソッドを使用した場合、データベースに2回移動する必要があります。したがって、私はむしろあなたの代わりにFoo.getBaz(id)Foo.fromId(…).getBaz()を行うことができるように

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); 
    } 
} 

を使用することをお勧めします。

+0

はい、それは理にかなっています。とにかくDBから 'foo'を取得しようとしているのであれば、余分なクエリの危険性を増やすために便利な関数を用意する必要はありません。また、なぜ私がやっていることが、上の意見提出者のようなものであると言うよりも、悪い考えである理由を説明してくれてありがとう。 – Palisand

+0

私はそれが*利便性が高い場合(特に約束のコールバックを書くことからあなたを救うような)、*追加*便利機能を提供するのは良いと思います。元のサンプルには、必要なときに静的メソッドを使用できないようにする 'fromId' /' getById'がありませんでした。つまり、静的メソッドのフルネームの名前を 'Foo.getBazFromId'または何かにして、混乱を減らすことができます。 – Bergi

関連する問題