0

ワークスペースの概念を実装したい。これはグローバルな概念です。他のすべてのコードは、このワークスペースの 1 つのインスタンスとやり取りします。ワークスペースは、現在のシステム状態を維持する責任があります (つまり、システム モデルとの対話、システム状態の永続化など)。

では、私のワークスペースに最適な設計戦略は何でしょうか。これはテスト可能でなければならないことを念頭に置いてください (現在は RSpec を使用していますが、代替案を喜んで検討しています)。

いくつかのオープン ソース プロジェクトを読んで、3 つの戦略を見てきました。どれも「ベストプラクティス」とは言えません。

彼らです:

  1. singletonクラスを含めます。しかし、これはどの程度テスト可能ですか? ワークスペースの全体的な状態はテスト間で変化しますか?
  2. すべての動作をクラス メソッドとして実装しました。繰り返しますが、これをどのようにテストしますか?
  3. すべての動作をモジュール メソッドとして実装しました。これについてはまったくわかりません!

どれが最高ですか?それとも別の方法がありますか?

ありがとう、ゴードン

編集

すべてのコードに 'singleton' モジュールを含め始めたとき、コードを作成したときに、これらのグローバル インスタンスへの参照がいたるところにあることで、自分のコードがどれほど密接に結合されているかを実感しました。

そのため、それらを完全に削除し、代わりにグローバル インスタンスへの参照を渡し始めました。しかし今、私は IOC の道を進んでいます - 私のコンストラクタを通して依存関係を渡します。

これはRubyで良いアイデアですか?または、何か不足していますか?

ところで、あなたが集めたかもしれない私は Ruby の初心者です!

4

2 に答える 2

0

シングルトン アプローチは、パフォーマンスの点で最良の選択です。テスト中に変更されないようにするには、モックアップを使用できます。

于 2010-05-07T10:06:15.357 に答える
0

標準ライブラリのSingleton モジュールが役立つのではないでしょうか? このモジュールをクラスに含める場合、作成できるインスタンスは 1 つだけです。次に、ワークスペースなどの状態を管理するためにインスタンス変数を使用できます。

これが「シングルトン クラスを含める」という意味だった場合は、申し訳ありませんが、「シングルトン」という用語は、Ruby の世界では通常、このコンテキストでよく使われます。

于 2010-05-07T16:40:18.387 に答える