1

他のプログラミング言語を学ぶ前に Java プログラミングを学びました。Node.js を学ぶにつれて、すべての用語が混乱しています。私はいつも API を、私たちの生活を楽にするために誰かが構築したメソッドやクラスなどのライブラリだと考えてきました。次に、モジュールについて学びました。これは、基本的に API (誰かによって既に作成されたメソッドのリスト) と同じものであると想定しています。次に、モジュールと API のようなメソッドのリストである Express Framework について学びました。さらに、これらの機能をプログラムに組み込む方法は、すべて次のようなことです

    Var http = require('http');

したがって、これらの用語の違いを理解している人は、これらの用語を私の質問に対処できる文脈 (例) に入れることができますか?

助けてくれてありがとう。

4

2 に答える 2

2
  • ライブラリは、互いに関連する多数のモジュール、クラス、関数などの集まりです。

  • フレームワークは、単に呼び出すのではなく、その上に構築するためにセットアップされたライブラリの一種または一部です。また、ライブラリとフレームワークの区別が少しあいまいになることがあります。

    Express では、着信要求を処理し、いつコードを呼び出すかを決定するApplicationと その上に構築します。Router

    app.get('/', function (req, res) {
        // ...
    });
    

    ただし、フレームワークはコードを超えてツールにまで及ぶこともあります。Compound.js '実行可能ファイルはこの良い例です。

  • モジュールは、ライブラリまたはフレームワークの個々の部分です。Node では、それは単一のスクリプト ファイルであり、Objectスクリプトからエクスポートされます。

  • API は、ライブラリ、フレームワーク、またはモジュールと対話する方法の概要/説明です。

    これは通常、ドキュメントに記載されているものであり、アクセス可能なメンバー、その名前、型、受け入れる引数などです。

    Express の API は次のとおりです。

    • express
      • タイプ:function
      • 名前付き引数: (なし)
      • 戻り値:Application
      • メンバー
        • listen
        • タイプ:function
        • 名前付き引数:
          • 名前:port
          • タイプ:Number

于 2013-08-02T20:23:42.893 に答える
1

これは主に独断的な質問です。しかし、Node コミュニティで一般的に使用されているいくつかの用語と、それらの間の事実上の違いを大まかに説明しようとします。

ノードに関連するモジュールは、Java ライブラリに関連付けるものと非常によく似ています。これは、Node ユーザーが多くのことを行っていることを発見するためのラッパーを提供します。誰もがやりたいことを実行するために、ノード ライブラリ関数のラッパーを頻繁に提供します。簡単な例は、wrench のような再帰的なファイル システム リーダーです。モジュールは、コードをモジュール化するために使用するファイルにも拡張されます。たとえば、モジュールは NPM を介してインストールされるだけでなく、標準の OOP プラクティスの下で、コード機能を分離するためにコード ベースの一部として記述する個別の JavaScript ファイルです。

require('someNPMINStalledModule')

require('./someFileInYourCodeBase.js')

どちらもモジュールです。1 つは NPM 経由でインストールされ、ノードを起動したディレクトリの node_modules ディレクトリにあります。後者の例は、ノードを起動したディレクトリにある JavaScript ファイルです。

次に、フレームワークがあります. コアでは、これらはモジュールと同じことを行いますが、より広く普及することを意図しており、ノードの使用方法を実際に変更します。Java の世界では、Express のようなフレームワークは Grails のようなものに似ています。Java で実行できることはすべて含めて実行することができますが、grails はいくつかのものをラップし、冗長でない方法で一連の作業を実行するための便利で強力なメソッド呼び出しを提供します。最終的には機能的に同等のコードになりますが、Grails では言語をもう少し一般化することで、より少ないコード行でより多くのことを達成できるようになりました。しかし、Grails が必要な機能を提供しない場合でも、ネイティブ コードを使用できます。この「数行のコード」の利点を犠牲にして、抽象化のレイヤー、追加の関数呼び出しなどを追加しました。あなたがスタイルを深く気にする人でない限り、この区別は重要ではありません. 筋金入りの ExpressJS 開発者は、コードにプレーン ノードの http サーバーを含めた場合、おそらく気に入らないでしょう。それは無効なノードであるため、またはパフォーマンスの観点からは別の理由で、コードのスタイルを台無しにします。コードでフレームワークを使用する場合は、このフレームワークで使用されているコーディング規則を使用することに固執する必要があります。しかし、wrench のようなモジュールを使用してディレクトリを再帰的に検索する場合、単一のファイルを読み取るために fs.readFile を使用することはスタイル的に完全に受け入れられます。それはあなたのコードのスタイルを台無しにします。コードでフレームワークを使用する場合は、このフレームワークで使用されているコーディング規則を使用することに固執する必要があります。しかし、wrench のようなモジュールを使用してディレクトリを再帰的に検索する場合、単一のファイルを読み取るために fs.readFile を使用することはスタイル的に完全に受け入れられます。それはあなたのコードのスタイルを台無しにします。コードでフレームワークを使用する場合は、このフレームワークで使用されているコーディング規則を使用することに固執する必要があります。しかし、wrench のようなモジュールを使用してディレクトリを再帰的に検索する場合、単一のファイルを読み取るために fs.readFile を使用することはスタイル的に完全に受け入れられます。

次に、ファイルの提供などの簡単なことをすばやく起動できるモジュールであるミニアプリケーションがあります。例: http-server は、単純なコマンド ラインで、任意のポートにファイルのディレクトリをサーバーします。独自のコードで「require」を使用してそれらを使用することはありませんが、このタイプのモジュールは正直なところ、ノードが提供する最も有用なものの一部になる可能性があります。いくつか使用することを強くお勧めします。(Nodemon、http-server、および grunt は、開発作業を容易にするのに役立ついくつかの非常に有用なモジュールの例です)

最後に、ネイティブ拡張があります. Node が提供する並行性は、V8 バックエンドから得られます。純粋な Javascript でこれを複製することは不可能であり、真に非同期のコードを記述する唯一の方法は、Node API によって提供される非同期操作を利用するか、process.nextTick で非常に不安定なロジックを実行するか、子プロセスを fork するか、ネイティブ拡張を記述することです。ネイティブ拡張機能は、Node が提供しない真の同時操作を提供します。データベース通信が最もわかりやすい例ですが、スレッドを生成して作業を行う C++ 拡張機能は誰でも開発できます。「threads a gogo」と呼ばれる Javascript のビットを処理するためにスレッドを起動する非常に便利なモジュールもあります。これにより、真の並行作業の開始が簡素化されますが、そのようなことが必要な立場にある場合は、ユースケースに間違った言語を使用しています。最終的に、これらはモジュールと使用方法に違いはありませんが、NodeJS API によって提供されない I/O タイプの操作に対して追加の並行メソッドを提供できるという事実を認識することは、ユニークで非常に重要な違いです。

于 2013-08-02T20:05:58.290 に答える