2

クラス間でいくつかのフィールドが異なるだけで、すべて非常に似ている一連の継承されたオブジェクトがあります。このクラス階層のベースには、後続のすべてのオブジェクトが持つ必要がある多数のフィールドを含む抽象クラスがあります。このようなもの:

abstractBase
  obj1 : abstractBase
    obj2 : obj1
      obj3 : obj2

これらのオブジェクトを表示するビューは基本的にすべて同じです。異なるデータを表示するために新しい div を導入するだけです。私はMVCにかなり慣れていないので、これには2つの主要なオプションしかありません。

1 つのアプローチは、具象オブジェクトごとに厳密に型指定されたビューを作成することです。各ビューは非常に似ていますが、基礎となるオブジェクトがわずかに異なります。私の考えでは、これは各ビューのコンテンツの 90% 以上が次のビューで繰り返されるため、DRY 原則に違反しています。しかし、利点として、ビューには重要なロジックがありません。

もう1つのアプローチは、ビューを基本抽象クラスにバインドし、継承されたクラスに対してチェックを導入して、何かをレンダリングする必要があるかどうかを判断することです。何かのようなもの:

if (Model.baseObject is obj3){ render out the special fields }

利点として、私は DRY 原則に違反することはありません。これは良いことだと考えています。しかし、欠点として、ビューにはロジックが含まれます。私が理解しているように、これは多かれ少なかれ眉をひそめています。

  • 同じような状況になった人はいますか?
  • どのようなアプローチをとったのですか?
  • 私が見なかった/認識していなかった別のオプションはありますか?

現在、私はより重いビューと冗長性の少ないコードに傾いています。それはより良いようです。

ありがとう

4

2 に答える 2

3

ASP.NET MVC ビューで許容されるロジックの量はどれくらいですか?に対する選択された回答に同意します。

基本的に、ビューはモデル データを表示するための構造として機能することを目的としています。したがって、特定のモデルを表示するために作成する構造を、モデルに含まれるデータに基づいて調整できる場合、ビューはその目的を果たしています。レンダリングするモデルの特定のプロパティに基づいて、ビューに要素を条件付きで表示することは、許容される方法です。

ビューに何らかの方法でモデル データを変更するロジックが含まれている場合、これは MVC が確立することを意図した関心の分離に違反します。

于 2012-03-20T01:06:37.247 に答える
2

強く型付けされたビューを持つ最初のアプローチに従うべきだと思います。これらのビューに固有のViewModelを作成してから、ビューにバインドできます。別のViewに存在するViewModelの再利用性を感じるところはどこでも、PartialViewsを利用してください。

于 2012-03-20T01:10:33.850 に答える