私はカスタムモデルバインダーからオブジェクトを取得する必要がある場合は、バインダーは、サービス層、リポジトリ層とやり取りする必要があり、または...?
-
12-09-2019 - |
質問
私はこれに似たクラスを持っている場合:
public class Person
{
public string firstName { get; set; }
public string lastName { get; set; }
public Pet myPet { get; set; }
}
私は私のフォームからカスタムモデルバインダー、ポストペットに送信されることはありません作成するときに、それはこのようなデータで送信します:firstNameの:「myFirstName」lastNameの「myLastName」myPet:「myPetsName」
ペットの名前が渡されず、実際のペットオブジェクトされているので、、ペットオブジェクトは、モデルバインダーの中から検索する必要がある。
私の質問は、モデルバインダーは、サービス層、リポジトリ層、あるいはそれもペットを取得しなければならないと対話しなければならないのですか?サービス層での問題は、私はサービスを初期化するときにModelStateへのアクセス権を持っていないようだということです:((this.ModelState)は私にエラーを与えます)。
_petService = new PetService(new ModelStateWrapper(this.ModelState));
私はPersonオブジェクトを作成するために、モデルバインダーが必要な場合は、ペットは何とか割り当てる必要があります...私はこれを行うことになっていますか?
解決
私は何をして代わりに、ビジネス・オブジェクトへの結合のビュー/プレゼンテーションモデルを使用しています。ユーザーが無効な値を入力することができますし、あなたが自分の過ちを修正するためにそれらを促す際に、ユーザーにこれらの無効な値を再表示する必要があることを覚えておいてください。しかし、あなたの「本当の」ビジネスオブジェクトは、おそらく無効な値を受け入れることはありません。だから、ビューモデルは、任意のユーザー入力のためのビジネス・オブジェクトは受け付けませんでも入力を許可する必要があります。
これは、結合が容易になります。あなたは(有効な)ユーザー入力を持つビジネス・オブジェクトの更新時にのみ、バインドするためにリポジトリをヒットする必要はありません。
所属していません StackOverflow