Javascriptを使用したデザインパターンの重要性、NodeJsなど


36

Javascriptは今後数年間でWebのユビキタスプログラミング言語であるように思われ、新しいフレームワークが5分ごとにポップアップし、イベント駆動型プログラミングがサーバー側とクライアント側の両方をリードしています。

Javascript開発者として、従来のデザインパターンを他の言語/環境よりも重要と考えていますか?

Javascript開発者が定期的に使用している上位3つのデザインパターンに名前を付け、それらがJavascript開発にどのように役立ったかの例を示してください。


5
一部の人々は、デザインパターン(特にGoFのもの)は言語不足の兆候であると主張しています(この説明を参照)。JavaScriptは本質的にプロトタイプで機能的であるため、別のパターンセットが適用可能/有用であると思います。

回答に非常に興味を持っています...質問:+1
usoban

2
Stoyan Stefanovによる「JavaScript Patterns」という本は、JSで使用できる多数のパターンに関する優れたリソースです。それらの多くは、JS専用に存在し、他の言語には存在しません。
イゴールガナポルスキー

Javascriptには独自のパターンがあります。Igorが言及した本に加えて、Addy OsmaniのLearning Javascript Design Patternsもあります。これは無料です。
user16764

回答:


23

Javascript開発者として、従来のデザインパターンを他の言語/環境よりも重要と考えていますか?

古典的なデザインパターンはJavaScriptには適用されません。

適用されるのは、モジュール式の機能的なコードを書くことです。

コンストラクターとファーストクラス関数を組み合わせて使用​​する必要があります。

JavaScript開発者として、私はJavaScriptをJavaではなくLISPとして扱うことに個人的に取り組んでいます。したがって、従来のOOPコードをエミュレートするのではなく、モナドと高レベルの機能スタイルコードをエミュレートしてください。

Javascript開発者が定期的に使用している上位3つのデザインパターンに名前を付け、それらがJavascript開発にどのように役立ったかの例を示してください。

繰り返しますが、設計パターンはそれほどそれほど適用されませんが、以下に3つの重要な構成要素があります。

  1. クロージャーの使用
  2. ファーストクラス機能の使用
  3. オブジェクトファクトリの使用の有無 new

従来のデザインパターンを使用して同じ種類のコードを実行する場合と比較して、これらの種類の手法の例を示すことができるコンテキストを残してください。

古典的なデザインパターンのいくつかと、それらをjsで実装する方法、およびjs自体により適した代替パターンを見てみましょう。

オブザーバーパターン:

node.js、この単純ですevents.EventEmitter。ではjQueryこれで$.fn.bind&& $.fn.trigger。でbackboneこれですBackbone.Events.triggerBackbone.Events.bind。これは、日々のコードで使用される非常に一般的なパターンです。

「ここでオブザーバーパターンを使用している!」いいえ、これは単にメッセージを渡す低レベルの方法、または変更をカスケードする方法です。

たとえば、バックボーンでは、すべてのMVCビューがモデルonchangeイベントにバインドされるため、モデルを変更すると、変更がビューに自動的にカスケードされます。はい、これは強力なパターンですが、その使用はイベント駆動プログラミングで非常に一般的であり、どこでも使用されていることに気づいていませんでした。

WebSocketprototcol我々は.on、我々はにバインドするために使用しているon("message", ...イベント。繰り返しますが、これは非常に一般的ですが、従来のOOPベースではなく、ストリームのオブザーバーですwhile (byte b = Stream.ReadNextByte())

これらはすべて、Observerパターンの強力な使用法です。しかし、これはあなたが使うパターンではありません。これは言語の単純な部分です。これは単なるコードです。

メメントパターン:

これは単なるJSONです。オブジェクトの状態をシリアル化して、アクションを取り消すことができます。

function SomeObject() {
    var internalState;

    this.toJSON = function() {
        return internalState;
    }

    this.set = function(data) {
        internalState = data;
    }

    this.restore = function(json) {
        internalState = JSON.parse(json);
    }
}

var o = new SomeObject();
o.set("foo"); // foo
var memento = JSON.stringify(o);
o.set("bar"); // bar
o.restore(memento);

JavaScriptでは、メモリメント用のAPIをネイティブにサポートしています。toJSON任意のオブジェクトで呼び出されるメソッドを定義するだけです。お問い合わせの際JSON.stringifyには、内部的に呼び出します。.toJSONあなたはJSONにシリアライズしたい、実際のデータを得るためにあなたのオブジェクトに。

これにより、コードのスナップショットを簡単に作成できます。

繰り返しますが、これは思い出のパターンではありません。これは、JSONであるシリアル化ツールを使用しているだけです。

状態パターン/戦略パターン:

状態パターンは必要ありません。ファーストクラスの関数と動的型があります。その場で関数を挿入するか、プロパティを変更するだけです。


レイノス、いい答え。例については、概念レベルからもっと考えていました。例えば、「オブザーバーのパターンが状況を助けた...」

@Lewisはあなたが好きないくつかのデザインパターンを選択し、後でより適切な機能的な代替案を提案しようとします。
レイノス

努力のアプローチと答えは素晴らしいRaynosです。ありがとう。
ルイス

@ルイス私はさらにいくつかを試してみましたが、それらはすべて厳密な古典的なオブジェクト指向言語に合わせて調整されているため困惑しました。他の特定のデザインパターンがある場合は、私に知らせてください。
レイノス

プロトタイプパターンを忘れてしまった-別名愚かなjavascriptには通常のoopもありません ;)
c69

10

この回答を主観的な意見としてください。

Javascript開発者として、あなたは従来のデザインパターンを他の言語/環境を使用した場合よりも重要であると考えていますか?

Gang of Fourのような従来のデザインパターンを意味する場合、ほとんどの技術は「実装ではなくインターフェイスへのプログラム」や「クラス継承よりもオブジェクト構成を優先する」などの言語/プラットフォームに依存せず、JavaScript開発者にとっても同様に重要です。

創造的、構造的、行動的などのより具体的なパターンは、言語の機能がその使用に大きな影響を与える可能性があるため、他の言語と同じ方法または頻繁に使用する必要がある場合があります。そのため、一部の言語(JavaScriptを含む)には、提供する機能または構文糖に基づいた独自のデザインパターンがあります。

一般に、従来のデザインパターンは他の言語と同様に重要ですが、JavaScript固有のパターンは従来のパターンよりも重要です。

Javascript開発者が定期的に使用する上位3つのデザインパターンに名前を付け、それらがJavascript開発でどのように役立ったかの例を示します

必須のJavaScriptデザインパターンの中で、主にこれらを使用します。

1.コンストラクターパターン(プロトタイプ付き)

特にnode.jsを作成するときのサーバー側では、ネイティブのカプセル化はありませんが、モジュールの作成に適しているためです。また、GitHubでリポジトリを閲覧する場合、他の多くの開発者に人気があるため、このパターンに精通していると、他のコードをよりよく理解するのに役立ちます。

2.モジュールパターンの表示

カプセル化によるモジュール性を提供します。

3. DRYパターン

これはかなりシナリオ固有ですが、すべての開発者は可能な限り使用する必要があります。


ありがとう!いい答えと、私が望んでいた種類の応答。質問は主観的なものとみなすことができますが、このような良い回答は適切な答えがあることを示唆しています。「サインオフ」する前に、さらに応答を待ちます。

2

デザインパターンは、CSのデザインクラスで教えられます。これらは必須ではありませんが、類似の状況を見つけて解決済みの解決策を見つけることができれば、本当に役立ちます。

また、プログラマーがより簡単に通信できるようになります。パターンに関しても同僚と話すことができます。ここで私がオブザーバーを持っていると言ったら、何が起こっているのかはかなりよく理解されています。

人々は自然に自分でデザインパターンに適合するソリューションを考え出しますが、デザインパターンは役立つ用語や標準的なアイデアを定義するのに役立ちます。

パターンについて特筆すべきことは何もありません。最も良いことは、それらが繰り返し有用な方法で標準化され定義されたアイデアであることです。


1

JavaScript開発者として、従来のデザインパターンを重要と考えていますか、それとも重要ではないと考えていますか

彼らは不可欠です。

これは、再利用可能なソリューションの概念が言語を超越できるためです。-構文の変更-実装の変更-パターンの概念はまだ存在します。

あらゆる言語の開発者は、構文ではなくパターンを学習することで、高度なJSを学習できます。これを知らない人は見逃しています。

Javascript開発者が定期的に使用している上位3つのデザインパターンに名前を付けてください

頻繁に使用されるパターンの中には、「反対する」人もいます。ただし、高度なJSでは非常に一般的で強力なため、知っておくと便利です。

1-名前空間-コードをオブジェクトにラップします。

var x =(function(){})();

2- ObjectConfiguration、工場のようなパターン。-多数の変数ではなく、関数にオブジェクトを渡します。

var product = factory({});

3-コールバック機能。-タスクが完了したときに呼び出される関数をパラメーターとして渡します。

function longTask(function(){//完了したら電話してください});

私が言ったように、これらはパターンではないと主張する人もいるかもしれませんが、それらは非常に一般的で非常に強力であり、実際の一般的な問題に対する非常に有用な再利用可能なソルトンであるため、言及する必要があります。これがデザインパターンの定義です。

素晴らしい質問です。

お役に立てば幸いです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.