エディター画面をリファクタリングしようとしています。編集者のモデルはドメインモデルでした。ユーザーが特定の役割を持っている場合にのみいくつかのフィールドの編集を許可する必要があるため、この画面のビューモデルに移動します。モデルの作成と編集の両方に同じエディタービューを使用したいのですが、それは私の問題の一部かもしれません。
SOに関する他の場所で、ビューモデルは単純化する必要があることを読んだので、ビューモデルのインターフェイス階層のようなものは必要ありません。ただし、2つの異なるビューモデルに同じ強い型のビューを使用するにはどうすればよいですか。1つは作成用、もう1つは編集用です。ビューモデルには、ユーザーの役割に応じてほぼ同じですがわずかに異なるプロパティがあります。
これは、私が作成した2つのビューモデルを使用した簡単な例です。
public class RequirementCreateView
{
public int Id { get; set; }
public string Name { get; set; }
public string Justification { get; set; }
public string ImpactIfNotFunded { get; set; }
... etc for about 40 properties ...
}
public class RequirementEditView
{
public int Id { get; set; }
public string Name { get; set; }
public string Justification { get; set; }
public string ImpactIfNotFunded { get; set; }
public string Decision { get; set; }
public string Status { get; set; }
... etc for about 40 properties ...
}
2つのビューモデルは同じですが、編集モデルには、適切な役割を持つユーザーのみが設定できる2つの追加プロパティDecisionとStatusがあります。AutoMapperを使用して、ドメインRequirementオブジェクトからビューモデルにマップし、その逆を作成/更新アクションに使用します。
ただし、2つのビューモデルがあるので、ValidationMessageFor(m => Model.Name)のようなものが機能しないため、1つの厳密に型指定されたエディター画面を使用することはできません。そのため、次のように、この一連のビューモデルのインターフェイス階層を検討することになりました。
IRequirementEditorView --> common properties
|--> IRequirementCreateView --> create-specific properties (none right now)
|--> IRequirementEditView --> edit-specific properties
次に、エディタービュー画面参照IRequirementEditorViewを用意します。しかし、繰り返しになりますが、これは単純化されたビューモデルに関する現在の知恵に反します。しかし、別の方法は、DRYに違反するエディター画面を複製することです。
これは明らかに一般的な問題ですが、私は今困惑しています。何かアドバイス?
ありがとう。
編集他の非常によく似た投稿を見た後で明確にする必要があります。「同じ」エディタービュー画面を使用していると言うときは、Create.cshtmlとEdit.cshtmlの2つの別々のビューを使用しています。これらのそれぞれは、次のように実際のエディターフォームを含む部分ビューを参照するだけです。
@Html.Partial("Controls/RequirementEditor", Model, ViewData)
これは、ドメインオブジェクトをビューモデルとして使用していたときに使用したものです。