0

MVC ベースのアプリケーションを開発しています。クライアントの名前を含む配列があります。配列はデータベースから取り込まれます。

コントローラー(Java) はこの配列をビュー(JSP) に渡し、ビューはそれをレンダリングします。クライアントのリストは昇順で表示する必要があります。また、XYZ というクライアントが存在する場合、その XYZ クライアントは常にリストの最初に表示されます。このようなルールは他にもあります。

問題は、設計の観点から、並べ替えをどこで行うべきかということです。コントローラー (Java) またはビュー (JSP) で発生する必要がありますか?

余談ですが、私は JSP/JavaScript よりも Java でのプログラミングに慣れていることも言及する必要があります。「正しい」または「間違った」方法がない場合は、コントローラー自体でソートすることをお勧めします。

また、パフォーマンスの観点から、どちらが優れていますか?

4

4 に答える 4

3

設計の観点から、コントローラーは並べ替えのルールを制御する必要がありますが、並べ替え自体を実行するべきではありません。むしろ、このタスクをモデルに委任する必要があります。理想的な世界では、コントローラーはデータに変更を加えるべきではなく、データの変更方法をモデルに伝えるだけです。

残念なことに、現実は理想的な設計を妨げることがよくあります。ユーザーが列ヘッダーをクリックするなどして並べ替えを制御できる場合、ビューがデータを並べ替えることができるショートカットを使用して、モデルへのラウンドトリップの回数を減らすことがよくあります (これは多くの場合、データベースとして実装されている) したがって、RDBMS の負荷が軽減されます。この決定の不幸な副作用は、ページングとの一貫性の欠如です。ビューでの並べ替えは、現在表示されているものの前または後にあるべき他のページのデータを無視して、現在のページのデータを並べ替えます。この欠点は、多くの場合、「機能」としてユーザーに提示されます。

あなたの場合、順序付けは「ビジネス ルール」の一部に見えます。「XYZ」レコードを一番上に置く必要があり、「他のそのようなルール」があるという事実は、並べ替えが純粋に視覚的な問題ではないことを示唆しています。ソートに関する「メタデータ」を保持できるある種の「ソート記述子」を設計することを検討してください。コントローラーは、この「ソート記述子」のインスタンスを作成し、それをモデルに渡して処理する必要があります。モデルは記述子の内容を「解釈」し、正しい順序でデータを生成する必要があります。

于 2013-07-18T15:56:34.857 に答える
0

設計の観点から言えば、コントローラーは、ビューがデータをどのように表示するかを認識してはいけません。並べ替えられており、他のルールがあるという事実は、純粋に表示上の制約です。一体、日付はコントローラーで注文する必要さえまったくありませんHashMap

そうは言っても、コントローラーで物事を注文する方が効率的かもしれません。

于 2013-07-18T15:55:56.263 に答える
0

並べ替えは SQL クエリ自体で行うことができ (並べ替えが複雑でない場合)、コントローラーを介してデータをビューに渡すことができます。

ただし、SQL ステートメントですべてを実現できない大きなルール セットがある場合は、単にコントローラーで実行します。

いつでもストアド プロシージャを作成し、それを呼び出すことができます。私の意見では、それは本当に好みです。

コントローラーはこの種のことを目的としているため、MVCパターンのために、コントローラーに配置するのが好きです。

于 2013-07-18T15:45:22.053 に答える
0

デフォルトのソート順は、データベースで処理する必要があります。データベース設計が適切なインデックスを配置することも考慮している場合、そのようなことを行うために高度に最適化されています (デフォルトの並べ替えが行われている列のクラスター化されたインデックスのように)。ただし、最悪のシナリオでも、コードで実行するのにかかる時間よりも早くソートされます。

2 番目の並べ替え順序はビューレイヤーで処理する必要があります。それが仕事だからです。つまり、データの表示方法を処理します。ビューは、Comparatorさまざまな並べ替え順序をサポートするために s を理想的に採用できます。表形式のデータのビューがあり、ユーザーが他の列での並べ替えを要求した場合。ビューでソートする必要があります(コントローラーモデルではありません)。

コントローラーは関係ありません。フローを調整するか、モデルからデータを移動するだけです。適切なビューを識別し、ビューで使用できるようにします。コントローラーはデータを処理しません。モデルのお仕事です。

しかし、並べ替えは処理に関するものではありません。これは、柔軟性を維持し、ビューに依存する順序でレンダリングすることです。モデルでそれを行うことで、データをどのように表示するか、アプリケーションの種類 (Web またはデスクトップ) に応じて、物事を 2 回ソートすることを強いることになります。

モデルでの並べ替えについて私が確認できる唯一の使用例は、データ ソースがまったく並べ替えられていない場合 (たとえば、データベースではなく、Web サービスである場合)、またはオーバーライドしたい場合に、既定の並べ替え順序を提供することです。一連のビュー(データ自体をソートしていないビュー)によって共有される順序。

于 2013-07-18T16:03:58.073 に答える