2017-09-27 6 views
0

私はいくつかのビジネスロジックを実行し、いくつかの計算を返すステートレスなクラスをいくつか持っています。それらのそれぞれは、当然他のクラスへの依存関係のセットを持っています。Typescriptでテスト可能な関数をエクスポートするための適切なクラス設計は何ですか?

は今、私が間ジャグリングきた2つのデザインがあります。

  1. は、各メソッドは静的メソッドでクラスを持っています。 jest import mockingを使用して、テストの依存関係を上書きすることができます。利点は、1つのクラスインスタンスしか持たないことです。

  2. 通常の非静的メソッドを持つクラスがあります。これは、使用される各場所でクラスをインスタンス化する必要があります。私はコンストラクタでクラスの依存関係を渡すことができます。これをテストするのはかなり簡単です。欠点は、複数のクラスインスタンスと潜在的にコード内の依存関係を作成することです。

どちらが好ましいイディオムTSアプローチですか?

IoCコンテナを使用する古典的な解決策もありますが、このアプリケーションはかなり小さく、余分な膨らみを追加したくないため、これを避けたいと思います。

また、pure関数とforegoクラスを一緒にエクスポートしたくないので、(VSCodeの)クラスの自動インポートを失うことになります。

答えて

0

また、純粋な関数とforegoクラスを一緒にエクスポートしたくないということは、(VSCodeの)クラスの自動インポートが失われるためです。

この「VSCodeでのクラスの自動インポート」は何ですか? VSCodeでは、TypeScript Importerのようなエクステンションを使用しています。これは、クラスだけでなく、任意のタイプ(classfunction、...)の適切なインポートを追加しています。

とにかく、IMOは、少なくともJavaScript関数プログラミングの機能を好む人(私を含む)にとっては、より多くのJavaScriptの慣用的な「純粋な関数」アプローチです。たとえクラスとC#/ Javaのようなオブジェクト指向プログラミングにも同情があっても、TypeScriptでもそうです。

クラスが本当に好きな場合は、静的なオプション#1を避けてください。複数のインスタンスを避けるために、アプリケーションをブートストラップするとき(DIコンテナのように)インスタンスをインスタンス化して共有することができます。

クラス間のカップリングは、構造的タイピングのためにタイプスクリプトの問題にはあまり関係がありません。クラスがインタフェースとして機能することができます→クラスAがクラスBに依存する場合、クラスAのインスタンス。

関連する問題