0

私は、インターネット ユーザーにいくつかのサービスを提供するインターネット Web サイトに取り組んでいます。そこで、ビジネス チームの協力者が必要な情報を取得できる管理システムを用意しました。たとえば、過去 3 日間に登録された新規ユーザーは何人ですか? このように、管理システムには、いくつかのテーブルを条件で検索するためのページがいくつかあります。これらのページはよく似ています:


ユーザーID:[--------------] ニックネーム:[------------] 登録時間:[BEGIN]~[END] [検索]


検索結果はこちら


このクラスUserには、UserID/Nick/RegisterTime (およびユーザー テーブル) 以外にも多くのプロパティがありますが、条件として扱われるのは 3 つのプロパティだけです。だから私は次のUserSearchCriteriaようなクラスを持っています:

public class UserSearchCriteria
{
    public long UserID { get; set; }
    public string NickKeyword { get; set; }
    public DateTime RegisteredTimeStart { get; set; }
    public DateTime RegisteredTimeEnd { get; set; }
}

次に、データ アクセス レイヤーで、 search メソッドが type の引数を受け取り、UserSearchCriteria対応Expression<Func<User, bool>>するクエリを作成します。DAL の外にいる間、他の開発者は、基準によって提供される 3 つの条件でのみユーザー テーブルを検索できます。たとえば、Cityプロパティが "New York" であるユーザーを検索することはできません (これは通常、このプロパティにインデックスがないためです)。 DB、それでの検索は遅いです)。

質問 1:検索を囲むこの実装は正しいですか? 助言がありますか?

質問 2:ArticleSearchCriteriaなどのプロジェクトでより多くの基準クラスが見つかりFavouriteSearchCriteria、基準は今後ますます増えると思います。それらはほぼ同じ動作メカニズムを持っていますが、コードを繰り返す必要があります。より良い解決策はありますか?

PSこれらの情報が必要な場合: jQuery + ASP.NET MVC 3 + MongoDB

4

1 に答える 1

0

私には完全に理にかなっています。ユーザーが「何でも」で検索できない場合は、テンプレートによる検索のようなアプローチを使用しても意味がありません。また、これをより一般的にしようとすると、まったく混乱します。たとえば、次のようなコードを作成するのは嫌です。

class SearchCriteria{
   Dictionary<object,object> KeyValuePairs;
   EntityKind Entity;
}

このように使用するには:

SearchCriteria sc = new SearchCriteria();
sc.KeyValuePairs.Add("UserId",32);
sc.Entity = EntityKind.User;

Eww。コンパイル時の型チェック、エンティティとプロパティが一致するかどうかのチェックなどはありません。

だから、私の答えは、はい:)、私はあなたが現在使用しているデザインパターンを使用します。私には理にかなっており、誰もがあなたが何をしているのかを見て、スピードを上げるのは簡単なようです。

于 2012-04-24T02:43:53.250 に答える