2017-12-21 11 views
0

私はASP.NET MVCアプリケーションを持っており、データ注釈属性に基づいて、レベルビューモデルの検証とドメインモデルの検証の両方で検証したいと考えています。ビューモデルの検証が簡単な作品:MVC - ドメインモデルの検証

public class CustomerFormVM 
{ 
    [Required] 
    [Display(Name = "Name")] 
    public string Name { get; set; } 
    [Required] 
    [Display(Name = "Street")] 
    public string Street { get; set; } 
    [Required] 
    [Display(Name = "City")] 
    public string City { get; set; } 
    [Required] 
    [Display(Name = "State")] 
    public string State { get; set; } 
} 

と、コントローラに呼び出す:

 if (ModelState.IsValid) 
     { 

私は、同じドメインモデルクラスを持っている:

public class CustomerFormPoco 
{ 
    [Required] 
    [Display(Name = "Name")] 
    public string Name { get; set; } 
    [Required] 
    [Display(Name = "Street")] 
    public string Street { get; set; } 
    [Required] 
    [Display(Name = "City")] 
    public string City { get; set; } 
    [Required] 
    [Display(Name = "State")] 
    public string State { get; set; } 
} 

が、どのようにそれを検証するために?

// viewmodel is CustomerFormVM object 
var pocoModel = mapper.Map<CustomerFormPoco>(viewmodel); 

私は「のviewmodel」変数をチェックしていないならば、私は結果に依存してどのように検証を呼び出して意思決定を行うために

... NULL可能名、ストリート、市と「pocoModel」変数を取得しますか?

+0

? –

+0

すべてをもう一度検証するのではなく、データが既にアプリケーションレイヤーで検証されている(ビューモデルで)と仮定することをお勧めします。ドメインでは、データではなくビジネスルールの検証に重点を置く必要があります。 – Alisson

+0

jQueryの検証では、クライアント側のビューモデルの検証を処理できます。あなたは単純な 'Required'属性しか使用していないからです。次に、それが合格すれば、サーバー側の検証について心配する必要はありません。 –

答えて

0

どうやってこのようなことができますか?

if (!string.IsNullOrEmpty(pocoModel.Name) && !string.IsNullOrEmpty(pocoModel.Street) && !string.IsNullOrEmpty(pocoModel.City) && !string.IsNullOrEmpty(pocoModel.State)) 
{ 
    // Code here 
} 

私はおそらく、このような少ない冗長でそれを行うだろう:あなたはドメインモデルにマッピングする前に、なぜビューモデルをチェックしませ

string[] fields = new string[] { pocoModel.Name, pocoModel.Street, pocoModel.City, pocoModel.State }; 
bool isValid = true; 
foreach (string field in fields) 
{ 
    if (string.IsNullOrEmpty(field)) 
    { 
     isValid = false; 
     break; 
    } 
} 
if (isValid) 
{ 
    // Code here 
} 
+0

はこの方法が嫌いです。まず第一に、バリデーションとロジックを混在させたくありません。第二に、私はクラス内の検証をしたい。第3に、データ注釈属性を使用したい –