データオブジェクトのリストとそれぞれを表す視覚的なものがある場合、並べ替え/フィルタリングロジックをどこにコーディングしますか?なんで?
編集:これまでのところすべての答えは良いですが、私は別の制約を追加するのを忘れました。毎回ビューを再構築したくない場合はどうなりますか?
並べ替え/フィルター操作の複雑さと、ビューコントロールがこれらのサービスをネイティブに提供するかどうかによって異なります。ビューコントロールがフィルタリングを提供し、それが単にメモリ内データを再フォーマットしている場合は、それをビューに残します。ソート/フィルターがデータソースへの別のトリップを必要とする場合は、すべてをコントローラーに保持します。
答えはデータにあります。モデルはデータを配信します。すべてのデータがビューにある場合は、フィルタリングと並べ替えをビューに含めることができます。データがチャンク化されている場合、モデルはデータを配信し、フィルタリング/並べ替えの一部を含む必要があります(ビューには引き続きフィルタリング/並べ替えが含まれる場合があります)。
コントローラはルーティングメカニズムであり、データの解釈方法を理解していないため、これらの機能を含めるべきではありません。
コントローラに並べ替えとフィルタリングのメソッドを配置し、ビューからこれらのメソッドを呼び出します。
ビューは、出力の表示のみを処理する必要があります。フィルタリング/並べ替えをビジネスロジックに入れて、ビューに戻します。
並べ替えは別のものにすべきだと思います。モデルをそのままにしておきたいので、モデルを並べ替えないでください。基本的に、モデルの変更はビューの再レンダリングを意味し、おそらくそれは望ましくありません(たとえば、フィルター前の状態とフィルター後の状態の間の遷移をアニメーション化する場合)。
私が提案するのは、モデルが、ビューのビジュアルオブジェクトのリストとソーターオブジェクトの両方を作成するためのデータを提供することです。ソーターオブジェクトは、ビジュアルオブジェクト(オブジェクトリストまたはその他のインデックス)にリンクされた識別子のリストであるレンダリングリストを出力します。IDが表示される順序は並べ替えの順序を表し、レンダリングリストにないIDは非表示になります。ビューがレンダリングリストを受信するたびに、ビューの表示が更新されます。