2012-09-12 15 views
5

オープンソースアプリケーションのために書いた手続き型のjavascriptコードがあります。これをOOPにリファクタリングしたいのですが、javascriptフレームワークの経験がほとんどないため、 1つは私のニーズに適していますが、私はまだ何も試していませんが、私はちょうどAngularJS、Backbone.jsとKnockoutについて読んでいます。既存のJSコードを構造化するためのフレームワーク

コードを構造化したいのですが、現時点では、グローバル変数と関数が混乱しています。

すべてのビジネスロジックはサーバーレベルで処理されるため、クライアント側のコードは、受信したデータまたはサーバーからの要求を使用してUIを処理します。

コードはここで見つけることができます: https://github.com/paullik/webchat/blob/asp.net/webchat/Static/Js/chat.js

あなたが何か提案はありますか?

+0

まず、フレームワークの使用を決める前に、JavaScriptの基本を把握することを強くお勧めします。オブジェクト指向のjavascriptを作成するのは難しくありません([これは必須です](http://shop.oreilly.com/product/9780596517748.do))。オブジェクトを定義して拡張するための独自の方法を提供するフレームワーク(ノード、背骨、バックボーンなど)が数多くありますが、まあまあの比較をするには十分に分かりません。 – RobMasters

+0

@RobMasters JSは私の問題ではないかもしれませんが、おそらく私はJSのすべてのトリックを認識していないかもしれませんが、問題なくJSを書くことができます。とにかく、提案のおかげで、私は確かに参照したリンクをブックマークします。 – Paul

答えて

5

オブジェクト指向のJavaScriptは、必ずしもすべての 問題の答えとは限りません。

私のアドバイスは、このトピックで選択した項目に注意してください。

OO-JSでは、従来のオブジェクト指向言語に似ているようにするために、コードを複雑にすることがあります。ご存じのように、JSはユニークです。

コードを構成し、実装を軽く柔軟に保つためのデザインパターンがあることが重要です。

OOではなく、高度なJS の実装を見ているデザインパターンです。 Axel Rauchmeyerの言い換えに、 "オブジェクト 方向付けされた方法論は、基本的なJavaScriptシンタックスには適合しません。 はねじれた曲がりくねった実装であり、JSははるかに表現力があります。 "

この分析の根底には、JSにはクラスがないという事実があります。本質的には、すべてがオブジェクトであるため、オブジェクト指向の変数と関数を既に持っています。したがって、問題はコンパイルされた言語(C/Java)で見られるものとわずかに異なります。

JavaScriptにはどのようなデザインパターンがありますか?

優れたリソースは、Addy O 'Somani and Essential Design Patternsです。 He wrote this book on Design Patterns in JavaScript.

しかし、もっと...もっと多くのことがあります。

A. require.js - JSコードのモジュールを非常に印象的な方法で読み込む方法があります。 これらは一般にモジュールローダーと呼ばれ、実行時にパフォーマンスを最適化するため、jsファイルのロードの将来と広く考えられています。イープノープなどが存在する。少数のjsファイルを読み込んでいる場合は、このことを覚えておいてください。 (要請によりトップに移動)。

B. MVC - コードを構造化するのに役立つ数多くのModel View Controllerフレームワークがあります。 パターンですが、あなたの目的には不合理かもしれません。あなたはバックボーン、ノックアウトと角度を言いました...はい。これらはあなたのためのトリックを行うことができますが、私は彼らが1)高い学習曲線、および2)あなたの環境に対する過度の可能性があると懸念しています。

C.名前空間またはモジュールパターン。 おそらくあなたのニーズに最も重要です。 グローバル変数を解決するには、それらを名前空間にラップして参照するだけです。 これはモジュールローダーを発生させる非常に良いパターンです。

D.閉鎖 - OO JSに言及しました。有用なのは、プライベートメンバーをあなた自身に提供するための閉鎖の概念です。最初はこれは謎めいたアイデアですが、パターンを認識した後は簡単なことです。

E.カスタムイベント - オブジェクト間でハードリファレンスを使用しないことが非常に重要になります。例:AnotherObject.member;これは、2つのオブジェクトを緊密に結合し、両方を柔軟に変更できるためです。これを解決するには、イベントをトリガして聞きます。従来のデザインパターンではこれがオブザーバです。 JSではPubSubと呼ばれます。

F.コールバック - コールバックパターンはAJAXを有効にしたもので、非ブロックioという名前のために、Window 8、Firefox OS、およびNode.jsの開発に革命をもたらしています。非常に重要です。

恐れてはいけません。これは、長期的かつ高度なJavaScript実装の方向性です。

パターンを認識すると、そこから下り坂になります。

これが役に立ちます。

+1

私はRequireJSを一番上に置きます。モジュール性を提供し、モジュールの依存関係を処理し、インテリジェントな方法で自動化されたビルド/ミニ化を可能にします。下に使用されているものにかかわらず、require.jsは大きなコードベースに多くの正気をもたらします。代替案もありますが、AMD(非同期モジュール定義)の一般的なアプローチは克服する必要があります。 とにかく、あなたの答えを言い換えると、誰かが私の言いたいことを言いたいかもしれませんが、一般的なアプローチと知るべき事柄のリストは本質的に同じです。 –

+0

確かに、良い提案、変更が行われました。 +1 –

+1

ありがとうございましたので、(おそらくrequire.js以外の)フレームワークを使用しないことにしましたが、そこにリストされている概念のいくつかを使用して私のコードをリファクタリングしました(そのうちのいくつかは、コードを頻繁に)。また、ネームスペース、マルチファイル構造は、私のJSコードに順序をもたらすかもしれません。 – Paul

関連する問題