1

私はASP.NET MVCサイトを持っており、コントローラーとモデル (リポジトリー) および HTML ヘルパー機能の分離を理解しようとしています。

目標は、フォト アルバム情報のデータベース テーブルにクエリを実行し、それを年ごとにグループ化して表示することです。

手順は次のとおりです。

  1. データベースにクエリを実行し、データベース情報のデータテーブルを返します。
  2. Datatable を AlbumCollection に変換 (リスト)
  3. 年ごとにアルバムを ALbumDictionary にバケット化する
  4. 毎年別の HTML テーブルにレンダリングします。

この要求が与えられた場合、次のことがわかります: 1,2,3 はすべてモデル内にあり、コントローラは単純に View を AlbumDictionary モデルにバインドするか、モデル内で 1,2 をバインドして AlbumCollection にバインドし、3 を HTML ViewHelper または 1,2 にバインドします。コントローラーのモデル3で、Albumdictionaryにバインドします

考え?

最初のループですべての変換を行うと最高のパフォーマンスが得られますが、それが最善の関心事の分離であるかどうかはわかりません。

特に上記の質問に対しては、一般的なフィードバックが興味深いでしょう: 関心の分離がパフォーマンスを覆すのはいつですか、またはその逆ですか?

4

3 に答える 3

3

オブジェクト指向の観点からはデザイナーにとっては見栄えがよく、保守も簡単だったと確信している本当に恐ろしいソフトウェアのユーザーであったため、ユーザーはパフォーマンスの面でほとんど低下することを指摘したいと思います。毎回。

パフォーマンスの違いが無視できる場合は、関心の分離に従ってください。そうでない場合は、最高のパフォーマンスを得るために必要なことを実行してください。おそらく維持するために余分な数分について心配するのをやめる必要があります(おそらく、コードが製品化されたら、年に1回そのコードに触れる)、そしてすべてのユーザーの毎日の問題の遅さについてもっと心配する必要があります。開発時間は非常に高価であるため、最小限に抑える必要がありますが、実際のところ、開発時間は、ユーザーに毎日無駄にする時間よりもはるかに安いことがよくあります。

于 2009-10-12T22:02:37.897 に答える
1

レンダリングに関係するものをモデルから遠ざけるようにします。

年ごとのグループ化がレンダリングにかなり近いことがわかります。そのため、モデルにもコントローラーにも入れません。一般的なアプローチは、Poco と DAL/BLL のモデルと、ViewModel (厳密に型指定されたビューで使用されるモデル) と呼ばれる別のモデルを持つことです。これは、レンダリング用のオブジェクトを準備するのに適した場所です。

ViewModel では、Linq を使用して年ごとにアルバムをグループ化します。これはうまくいけば十分に速いでしょう。

于 2009-08-30T20:25:14.073 に答える
0

次のいずれかの場合にのみ、コントローラーでバケット化を行います。

  • バケット化は1回だけ発生し、1つまたは2つの簡単なステートメントでそれを実行できます。

  • それは複数回発生しますが、私はAlbumDictionary.BucketByYear()ステートメントだけでそれを行うことができます。

それ以外の場合は、モデルを使用してそれを行います。

于 2009-08-30T14:21:10.513 に答える