2009-07-21 17 views
3

私は私のコントローラでの検索行動を持っていると私は、私は、文字列asp.net MVC:クエリ文字列を文字列または個別のパラメータとして渡しますか? asp.net MVCで

public ActionResult Search(string query) 
{ 
    return View(_repository.ListPeople(query)); 
} 

または個別のパラメータなどとしての私のリポジトリにクエリを渡す必要があるかどうかを判断しようとしています:

public ActionResult Search(string FirstName, string LastName, System.Nullable<byte> Education) 
{ 
    return View(_repository.ListPeople(FirstName, LastName, Education)); 
} 

多くの例では、オンラインでクエリ文字列メソッドを使用していますが、渡すパラメータがたくさんある場合は、扱いが簡単ですが、私には「安全」とは感じられません。これを行うより良い方法について一般的な合意がありますか?

答えて

2

モデルバインディングが好きです。そうすることで、追加の検索オプションを追加する場合は、モデルクラスとは別に変更を加える必要はありません。

情報herehere

+0

これは最もクリーンなアプローチであると思われますが、他の場所でモデルバインドを使用しましたが、なぜこの状況でも使用するとは思わなかったのです。ありがとう! –

1

私はほとんど間違いなく、第2の経路と一緒に行くお勧めします。あなたのコントローラをあなたのリポジトリに結合する必要はありません。リポジトリにデータの取得を任せてください。クエリー文字列を解析する必要はありません。それは仕事ではありません。コントローラーにそれを処理させてください。

2

個人的には、私はリポジトリにクエリ文字列を解析する責任を負わないことを好みます。懸念の視点から見ると、リポジトリは実装に依存しないままにすべきだと私は思っています。たとえば、単体テスト用のクエリ文字列を作成する必要がある場合は、パラメータを使用して直接メソッドを呼び出すよりも面倒です。

私はまた、コントローラーがコントローラをより軽く保つのを助けるので、よく定義されたサービスとのインターフェイスを持つことを好みます。私は、サービスをリポジトリへのゲートウェイとして機能させるようにしていますが、そうする必要はありません。呼び出しの目的が何であるかに応じて、2つ目の例のようにパラメータのセットか、構築されたドメインオブジェクトとして、リポジトリに渡す2つのことがあります。該当する場合。

関連する問題