1

私は次のアーキテクチャを持っています:

DAL (NHibernate) -> BLL -> WCF (http) -> Clients 

クライアントはドメインモデルについて何も知りません。WCFは、DTOオブジェクトを使用してクライアントと通信します。

クライアントの1つは、グリッドがほとんどないWebサイト(ASP.NET MVC)です。このグリッドの並べ替えを実装する必要があります。クライアントは要求されたデータの一部(ページング)のみを受信するため、並べ替えはサービス側で実装する必要があります。

これを行うための最良の方法は何ですか?今、私には良くないように思われる2つの方法があります。

  1. 各エンティティのプロパティごとに、サービス契約で個別の並べ替え方法を作成します(私の場合は36)
  2. 大量のリフレクションを使用して一般的なソートメソッドを作成し、クライアントからマジックストリング(プロパティの名前、方向)を受け取ります。

助けてくれてありがとう。

4

2 に答える 2

2

DALでNHibernateを使用している場合は、プロパティ名を渡して並べ替えてから、Criteria APIを使用してデータをクエリすることをお勧めします。リフレクションを使用せずに、並べ替えるプロパティを簡単に追加できます。並べ替え順序を変更するためだけに、同じデータに対して36の異なるメソッドを使用することを考えています...

于 2012-06-21T17:43:50.607 に答える
1

わかりました。私の場合、最適なソリューションであるDynamicLINQからNHibernateを見つけました。 http://nhforge.org/blogs/nhibernate/archive/2011/11/17/dynamic-linq-to-nhibernate.aspx

var elist = session.Query<MyEntity>()
          .OrderBy(“Name descending”)
          .Skip(first)
          .Take(count)
          .ToList();

また、ODataは良い方法のようですが、既存のプロジェクト構造を変更する時間がありませんでした。

Criteria apiによると、LINQとの互換性IQueryableのためではなく、戻る方法があればよいでしょう。IListデフォルトのクエリエンジンとして使用したくありません。

ありがとうございます。あなたは私が何か新しいことを知るのを手伝ってくれます!

于 2012-06-22T15:58:29.470 に答える