5

PRE: NodeJS モジュールとクラスを読みましたが、これはより具体的です。

Node のリファクタリングの一環として、Node モジュールとして技術的に実装されたアプリケーション サービス (DDD 用語) をいくつか用意しました。

(DDD の世界では、おそらく他のものでも) アプリケーション サービスはシングルトンである必要があり、Node モジュールは 1 つの「インスタンス」のみであることが保証されているため、これで問題ないように思えます (モジュールは単純に「シングルトン性」)

これらのアプリケーション サービスを適切なシングルトン クラスとしてリファクタリングすることを検討する必要がある理由はありますか?

4

1 に答える 1

8

モジュールの「単一性」が崩れる場合については、ノードのモジュール キャッシングに関する注意事項を確認してください。

./シングルトン モジュールを単一のパッケージ内のファイル パス ( 、../、またはで始まる/) で常に参照する場合は安全です。

サービスが他のモジュールで使用されるパッケージにラップされている場合、シングルトンのインスタンスが複数になる可能性があります。

この甘いサービス ライブラリを公開するとします。

service-lib/
⌞ package.json
⌞ service.js

service.js:
  var singleton = {};
  module.exports = singleton;

このアプリでserver.jsは、サービスのさまざまなインスタンスをother.js取得します。

app/
⌞ server.js
⌞ node_modules/
  ⌞ service-lib/
    ⌞ service.js
  ⌞ other-package/
    ⌞ other.js
    ⌞ node_modules/
      ⌞ service-lib/
        ⌞ service.js

このアプリはインスタンスを共有しますが:

app/
 ⌞ server.js
 ⌞ node_modules/
    ⌞ service-lib/
       ⌞ service.js
    ⌞ other-package/
       ⌞ other.js

同じことを同じにnpm installするappと、依存関係のバージョンに応じて、どちらかのディレクトリ構造になる可能性があります。ノードのフォルダー docに詳細があります。

于 2012-11-27T05:27:12.073 に答える