2017-12-15 8 views
0

デザインやセキュリティの観点から、私が必要とするすべてのモジュールを1つのファイルに持っていて、それらをエクスポートすると、何か欠点があるのだろうかと思います。これにより、すべての単一ファイル内のすべてのモジュールを追跡できるようになります。NodeJSはすべてのモジュールを1つのファイルに入れる必要があります。

例:

// my_requires.js 
const bodyParser = require('body-parser') 
const parseForm = bodyParser.urlencoded({extended: false}) 

const DOMPurify = require('dompurify'); 
const {JSDOM} = require('jsdom'); 

const jwt = require('jsonwebtoken'); 
const passport = require('passport'); 
require('../config/passport')(passport) 

module.exports = { 
    bodyParser: bodyParser, 
    parseForm: parseForm, 
    jwt: jwt, 
    passport: passport, 
    bcrypt: bcrypt 
} 

、その後、私はそれらを必要とする任意のファイルで、私はちょうど

const reqs = require('my_requires.js') 

する必要があります使用してのいずれかの欠点がある場合、私は把握できませんでしたこのような構成。モジュールはすべてグローバルスペースにロードされているので、私のアプローチの欠点はありませんか?

+1

これはNode.jsの一般的なデザインパターンです。単体テストのテストも容易になります。 –

+0

喜んで聞いてください。私は落とし穴がある場合に備えて、確かに確かめるために二重のチェックをしたかったのです。 – Michael

+0

時々このパターンには欠点があるかもしれませんが、それは議論の余地があり、プロジェクトによって異なります。私の選択では、私はこのパターンに反対します。 – Stamos

答えて

2

モジュールは、他のプロジェクトでモジュールを再利用するのが最も簡単なモジュールであるため、モジュールには必要なものだけが含まれているか、他のモジュールと共有する必要があります。

いくつかの他のモジュールのために、いくつかの文字を別の場所に保存する必要はありません。それをする理由はない。モジュールはシステムによってキャッシュされるため、他のファイルからのエクスポートを取得するのではなく、必要なモジュール内でrequire()を使用すると、モジュールがより独立して独立性が高まり、不要な依存性が減少します。

require()すべてを1か所にまとめてエクスポートすると、他に何もない独立した巨大な相互依存プロジェクトが作成されます。すべてがアプリケーション固有のコアアプリケーションファイルに依存するため、他のプロジェクトでは1つのモジュールを単独で再利用することはできません。そして、あなたはモジュールの独立性を取り除くことによって実際に何を得ましたか?たぶん、数行のタイピングを保存しただけです。それだけです。

node.jsと同じようにモジュール性を実装していない他のプログラミング環境からnode.jsの方が高速になる場合、直感的ではありませんが、各モジュールは、外部ライブラリ用のrequire()ステートメントのリストで開始する必要があります。による。はい、そのコードのいくつかは他のモジュールでも複製されますが、不要な重複ではなく、明快さとモジュール性のための依存関係の組織化されたステートメントと考えています。このモジュールが依存するものは次のとおりです。このモジュールを再利用するためには、何をインストールする必要があります。このモジュールを他のアプリとは独立して使用する方法は次のとおりです。

このような構造を使用することには欠点があるかどうかわかりませんでした。モジュールはすべてグローバルスペースにロードされているので、私のアプローチの欠点はありませんか?

何も白黒ではありません。時には、物事のグループを共有する理由があります。しかし、私はあなたの方法にこれらの欠点を挙げたいと思います。私は一般に技術を避けるでしょう:

  1. モジュールの独立性とモジュールの再利用性が低下します。
  2. コードを見るときにモジュールの依存関係が不明瞭になります。
  3. モジュールを個別にテストするのが難しくなります。
  4. 使用したいものをロードするために相互に依存する必要のないファイル間の不要な相互依存性を作成します。

は時折、あなたのモジュールの多くは、すべてを一度に必要なモジュールの共通セットがあることを見つける場合があります。その場合は、アプリからすべてにエクスポートしないでください。代わりに、それらの他のモジュールをインポートしてそれらをエクスポートする新しい共有可能なモジュールを作成します。次に、コアモジュールを独立させておき、再利用可能な新しいモジュールを作りました。一般に一緒に使用するモジュールのグループを取得します。このように、同じ問題を減らすことではなく、モジュール性と再利用性を向上させることで解決します(また、タイピングも節約できます)。

+0

詳細な回答ありがとうございます! – Michael

0

これはサーバーファイルで行う典型的な処理です。しかし、それらのほとんどは私のコードで、通常はサーバーファイルで1回または2回だけ使用されます。したがって、多くの場所で使用されている場合にのみ、それを別々のファイルに入れても意味があります。それ以外の場合は、コードが重複していると思います。

関連する問題