私はかなり大規模なJSプロジェクトでいくつかの作業を開始しており、コードをクリーンかつ効率的に構造化することを確認したいと考えています。私はJSでのOOPへのさまざまなアプローチを読んでいますが、本当に好きなものは見つかりませんでした。
プロパティを使用することでパフォーマンスが向上したことには感謝していprototype
ますが、真のプライベートメソッドと変数をミックスに追加しようとすると、かなり面倒になります。一方で、私はこのclosure
アプローチが本当に好きですが、パフォーマンスの低下には満足していません。パターンを調べましたmodule
が、かなり冗長であることがわかりました。どこかに幸せな媒体はありますか?
私が苦労していることを説明するために、2つの非常に小さなサンプルクラスを次に示します。
ポイントクラス:
function Point(x, y) {
this.x = x;
this.y = y;
}
// Get the x coordinate.
Point.prototype.getX = function() {
return this.x;
}
// Get the y coordinate.
Point.prototype.getY = function() {
return this.y;
}
// Get the (x, y) coordinate.
Point.prototype.getXY = function() {
return {x: this.x, y: this.y};
}
// Set the x coordinate.
Point.prototype.setX = function(x) {
this.x = x;
}
// Set the y coordinate.
Point.prototype.setY = function(y) {
this.y = y;
}
// Set the (x, y) coordinate.
Point.prototype.setXY = function(x, y) {
this.x = x;
this.y = y;
}
ユーザークラス:
function User(guid) {
var guid = guid;
// Return the user's GUID.
this.getGuid = function() {
return guid;
}
}
prototype
一度に何千ものポイントオブジェクトが使用される可能性があるので、このアプローチが最良の選択肢だと思います。ただし、座標の設定に検証を追加したい場合は、を呼び出すだけでバイパスできますPoint.x = <value>
。同様に、私は大部分の時間を呼び出すでしょうPoint.getXY()
。それは本質的にパブリックプロパティであるもののために新しいオブジェクトを構築するでしょう。クラスのゲッターとセッターの概念を取り除き、Point
完全にオープンなパブリックオブジェクトを作成する必要がありますか?これは、OOPのコンテキストでは間違っているようです。
クラスの場合User
、GUIDを内部に格納して、要求できるが変更されないようにします。これは(何かが足りない場合を除いて)このアプローチでは実行できないprototype
ため、ある種のを使用せざるを得ませんclosure
。一度に数百人のユーザーがアクティブになると予想しているため、パフォーマンスはPoint
クラスの場合ほど重要ではありません。ただし、コードベース全体で異なるタイプのOOPスタイルを切り替えたくはありません。
それで、一般的な質問として、私が欠けているJSのOOPへのアプローチはありますか?それは私がprototype
選択された関数と変数をきれいに民営化しながらプロパティを使用することを可能にしますか?または、私は間違った方向を見ていますか?私はこれに別の方法でアプローチする必要がありますか?