1

ウェブサイトの設定ページを作成しました。このページでは、ユーザーが操作できる一連のサイト全体の設定が表示されます。ユーザーが設定を選択すると、ページが自動的に ajax リクエストを実行して設定をデータベースに送信するようにしました。私の質問は、これをどのように行うかです。

最初は、リポジトリへの呼び出しを行っただけです。データを取得するための1回の呼び出し、それをViewModelに入れ、そのViewModelをViewに渡し、ajaxコントローラーが設定をデータベースに送り返しました。この方法は、必要に応じて偽のリポジトリを渡すだけでよいため、最初は特に単体テストの目的で最善の方法のように思えました。次に、ユーザーが設定を取得できるように、リポジトリを呼び出して、必要な設定名を渡します。

それから私は素晴らしいアイデアを思いつきました。私は SiteWideSettings というシングルトン クラスを作成し、サイトで可能な各設定はサイトのプロパティでした。SiteSettings が初めて呼び出されると、すべての設定が読み込まれます。いずれかのプロパティで Set が呼び出されると、リポジトリ関数が呼び出されて設定が送信されます。私の設定ビューでは、SiteWideViewOptions.Current を渡すだけで、ajax 呼び出しで、変更されたプロパティを更新しています。これは私にとってはうまくいきますが、コンストラクターがプライベートであるため、シングルトンのコンストラクターにリポジトリを実際に渡すことができないため、単体テストはあまりできません。私が現在持っているものはうまく機能していますが、それが最善の解決策であるとは思えず、ここでは単体テストは実際には不可能です。

次のいずれかを考えていますが、どれが最適かわかりません。

  • リポジトリ プロパティを SiteWideSettings クラスに追加する
  • 関数を SiteWideSettings クラスに追加してリポジトリに渡す
  • これにはシングルトンをまったく使用せず、このアイデアを思い付く前に行っていたことに戻ります

これに関するコメントは大歓迎です。

注: 知っています。この場合、最初にテストを作成しなかったため、ユニットテストが間違っていることはわかっています。そのことで私を叱らないでください..私はすでに自分自身を叱ったので、次のタスクでは二度とやりません約束 :)

4

1 に答える 1

1

「その後、私は素晴らしいアイデアを思いつきました。SiteWideSettings という名前のシングルトン クラスを作成し、...」

これは悪い考えのように聞こえます。データベースを最新の状態に保つ必要があるメモリ内キャッシュではなく、設定が何であるかについてのグラウンドトゥルースにします。パフォーマンスのために必要な場合は、ORM にキャッシングをさせてください。そうしないと、特に複数のサーバーでサイトを実行しようとしている場合に、問題が増えるだけです。

コントローラーを簡素化して、「セットアップ」および「ティアダウン」コードを少なくしたい場合は、IOC (Autofac など) を使用し、必要な依存関係 (DataContext やリポジトリなど) を per に注入します。 -http 要求ベース。

コントローラーをインスタンス化するだけで (コンストラクターを使用して依存関係を手動で注入する)、メソッドを呼び出すことができるため、アクション メソッドのテストが容易になりました。

于 2012-05-13T21:53:26.460 に答える