18

私は何年も C# を使用しており、ほとんどの場合、型ごとに 1 つのファイルを使用する方法に慣れています。また、ファイルをサブフォルダー (C# の名前空間に相当) に入れるのも好きです。

しかし今、私は TypeScript を使用してモバイル Web アプリケーションを構築しており、自分のコードをほぼ同じ方法で構造化していることに気付きました。ただし、これはうまく機能しません。

  • すべてのファイルはモジュール ラッパーを生成するため、同じモジュールを含むファイルが多数ある場合、出力 (バンドルされている場合) には多くの不要なコード行が含まれます。
  • 他のモジュールの型を参照することは..型名にモジュール名のプレフィックスを付ける必要があるため、C# ほど適切ではありません。

最初の点は、バンドルされた出力から不要なモジュール ラッパーを削除する小さなツールを作成することで修正できるはずです。そして、ファイルシステムの場所に関係なく、サブモジュールの使用を避け、すべてを単一のモジュールに貼り付ける必要があると考えています。

私が現在行っている/計画していることよりも、TypeScriptコードを構造化するためのより良い方法はありますか、それとも上記のような方法が推奨されるでしょうか? 単一責任の原則を好む人にとって、検討する価値のある代替手段は何ですか?

PS: これが SO のガイドラインの範囲内にあることを願っています。

4

2 に答える 2

14

これが私の推奨事項です。

Webサイト

Web サイトで TypeScript を使用している場合は、モジュールを使用して完全でスタンドアロンの機能のチャンクを囲み、1 つのファイルに保持します (管理できなくなった場合を除きます)。「モジュール a」が「モジュール b」の内部ビットにどれだけのアクセスを持っているかについては控えめにします。

生成されたすべての JavaScript を 1 つのファイルにバンドルして縮小します。

モジュールを次のように宣言します。

module MyModule {
    // ...
}

そして、参照を使用して他のコード ファイルでそれらを使用できるようにします。

///<reference path="MyModule.ts" />

ウェブアプリ

Web アプリの場合、スクリプトを多用するものをどのようにするかを決定する必要があります。軽量化する場合は、Web サイトのように扱います。多くのスクリプトを作成する場合は、AMD が最適です。

AMD では、フォルダー構造を使用してコードを整理できます。ファイルはモジュールなので、module MyModule宣言を使用する代わりに、ファイルに名前を付けますMyModule.ts。次に、フォルダーとファイル構造を使用してコードを整理し、必要に応じてモジュールをインポートできます。

import myModule = module("./Messaging/Async/MyModule");

したがって、名前を付ける必要があることを除けば、ステートメントと考えimportてください。using

実行時に、モジュールのロードを処理する何かが必要になります。これにはRequireJSが一般的な選択肢です。

ページに 1 つのスクリプト タグを追加するだけで、RequiresJS が読み込まれ、最上位モジュールの名前が伝えられます。

<script data-main="/Messaging/Async/MyModule" src="scripts/require.js"></script>

サーバーアプリ

サーバー アプリの場合、ほぼ確実に CommonJS を使用することになります (たとえば、nodejs ではデフォルトでサポートされています)。

サーバーがモジュールをロードすることを除いて、AMD とほぼ同じように機能します (AMD は実際には CommonJS に基づいています)。そのため、モジュールをロードするスクリプトを含める必要はありません。

ゴールデンブレット

これは本当にすべてのガイダンスです。必要に応じて、非常に大きなプログラムに Web サイト スタイルのバンドルを使用することもできます。スクリプトが一度ダウンロードされてキャッシュされることを考えると、初期費用は単純さに見合う価値があると判断できます。

そのため、特定のプログラムに合わないと判断し、別の方法でやりたいと思うまで、ガイダンスを使用してください。ガイダンスは、の原則に基づいています...

  1. Web サイトの http 要求の数を減らす
  2. Web アプリ / サーバー アプリの可読性と保守性を向上させる
  3. Web アプリ / サーバー アプリに必要なものだけを読み込む
于 2012-12-18T09:41:34.827 に答える
1

これは非常に主観的ですが、モジュールを多かれ少なかれ名前空間として使用しているため、関連するクラスを 1 つのファイルにグループ化しています。 C#用。

この理由の 1 つは、クライアント側の開発では、より多くの非常に小さなクラスとインターフェイス (多くの場合、それぞれ 2 つまたは 3 つのパラメーターのみ) を作成し、通常は特定のコンポーネントまたはビューの動作についてグループ化し、これらを単一のファイルの方が理にかなっているようです。

于 2012-12-18T09:43:39.037 に答える