私はSalesmanRepository
を持っています。私のデータベースのすべての営業担当者が表示されます。 結果をグリッド(Webインターフェイスを想像してください)に表示したいので、ユーザーはフィールドを表示または非表示にしたり、列を並べ替えたり、ページングを使用したりできます。リポジトリパターンの並べ替え、ページングおよび緩やかに結合
私は非常に大きなセットを持っていると仮定して、並べ替えとページングはサーバー側である必要がありますする必要があります。
私の質問では、どうすれば私のアーキテクチャに疎結合することができますか?
- データベースの列の名前をUIの列にバインドする必要はありません。後で新しいタイプのデータベースを柔軟に変更したいと思っています。
- ページングはどのように処理する必要がありますか?例えば
page
とnumberOfItemsPerPage
のようなパラメータをリポジトリのメソッドに直接追加することで、 - ソートにもどのようにアプローチすればよいですか?私は、データベースの列の名前をソートパラメータにバインドすることを嫌います。新しいタイプのデータベースを持つことができ、すべてのソフトウェアを壊すことになります。
基本的に、どのようにこれらの概念にアプローチして、疎結合したままにすることができますか?理想的には、言語にとらわれないアプローチが欲しいですが、より良い言語固有の答えがある場合はC#
を使用しています。
EDIT:どのように私はフィールドでソートするために私のリポジトリは、直接フィールドの名前を言及せず、伝えることができます:私の質問があるように、より正確にすることができますか?
EDIT 2:私はフィールドでソートする私のリポジトリをお伝えしたいと思いますが、私のリポジトリのインターフェースは私のビジネスロジック層であるので、私は実装にバインドされたくない(またはドメイン層)。
Name
という名前のテーブルがSalesman
というMySQLデータベース(したがってSalesmanMySQLRepository
)があるとします。
のは私も同じ列Name
が含まSalesman
という名前のテーブルで(SalesmanSQLRepository
付き)SQL Serverデータベースを持っていることを今言ってみましょうが、私のチームは、プレフィックスのいくつかの並べ替えをすることにしましたので、ここで私が代わりにBobbyName
をという名前を付けます何らかの理由で列で。詳細なものであり、ビジネスロジックとは何の関係もありません。
SalesmanRepository
はどのように見えるのですか?私は文字列を直接送信したくないので、それぞれの実装が全く違うからです。私はPagedResult<Salesman> List(SortingParameter field)
のようなメソッドがあると思いますが、どのようにこのパラメータを処理する必要がありますか?
あなたのデータモデルとビューの間のViewModelに別の抽象化を探しているようですね? –
ViewModelがソートやページングをどのように手伝ってくれますか? – MiniW
小さなデータセットの場合は、pageSzieやその他のフィルタやリポジトリ内のソートを気にする必要はなく、コントローラ(MVCパターン)はページング、ソート、フィルタリングを処理する必要があります。大規模なデータセットの場合は、OData(http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api)を使用し、データをサービスとして公開します。 – din