2011-08-06 23 views
3

ASP.NET MVCに存在する3種類のモデルに名前を付ける慣例は何ですか? (コントローラの入力、コントローラの出力、および永続性)ASP.NET MVCに存在する3種類のモデルに名前を付ける慣例は何ですか? (コントローラの入力、コントローラの出力、および永続性)

Visual Studioでは、MVC 3の足場はすべてのモデルクラスに「モデル」接尾辞を付けますが、これはモデルの型を区別しないような良いアプローチであるとは確信できません。

私は、これらの3つの異なるタイプのモデルの名前を付ける方法について質問したいと思います。私はビューを入力するモデルではないビューモデルと呼ばれています。永続性は永続性モデルと呼ばれます。コントローラの入力モデルはどうですか?

+0

あなたは、 "コントローラの入力モデル" とはどういう意味ですか? HTTP POSTアクションに何が渡されるのでしょうか?これは「出力モデル」と同じです。 (ViewModelなど) – RPM1984

+0

@RPM 1984:コントローラ入力とは、モデルバインディングを使用しているときにアクションのパラメータとして使用されるモデルを意味します。たとえば、あなたのアクションにA、B、Cという3つのパラメータがあるとしましょう。次に、これらの3つのプロパティを含むモデルクラスを定義し、MVCにデータバインディングを実行させることができます。これはコントローラの入力モデル –

+0

ああこれはとても良い質問です。なぜなら、特にasp.netのmvcインフラストラクチャ全体で同じモデルを入力と出力に使用する必要があるからです。 –

答えて

3

通常、コントローラの出力モデルには*ViewModel、コントローラの入力モデルには*Formを使用します。

永続性(ドメインモデル/エンティティ)に関して、私は特別な命名規則を使用しません。

+0

私はこの命名規則を個人的に気に入っていました。他の誰かが私により良い方向を教えてくれない限り、私はあなたの解決策に従います –

0

私はChangePasswordInputクラスを受け入れ、ChangePasswordResultクラスを返すChangePasswordメソッドを持つUserドメインエンティティを、持っています。 ChangePasswordInputは、ChangePasswordビュー(フォーム)のコントローラ入力および表示モデルとしても使用され、ビューのビューモデルとしてChangePasswordResultが使用されます。

+0

これらのモデル(* Input/* Result)のどれをビューのモデルとして使用していますか?それらのうちの1つだけを選択した場合は、htmlhelperから多くのサポートを得られません。私はこれを克服するためにこの答えを見つけた[http://forums.asp.net/t/1597367.aspx/1?Can+you+have+a+different+input+and+output+model+in+a+view+] 'ChangePassword'ビュー(フォーム)では' ChangePasswordInput'をモデルとして使用し、 'ChangePasswordSuccess'ビューでは' ChangePasswordResult'を使用しています。これはちょっと不器用です:( –

+0

@Boris Bucha:ビューに依存します。 –

2

私はそれがhereで与えられた方法とかなり似ています。コントローラの入力モデルと、サービスレイヤ(リポジトリなど)を呼び出すクエリを区別します。私は以下を採用し始めています:

  • コントローラの出力モデルに*ViewModelを使用してください。
  • コントローラー入力 の場合、*Queryを使用します。ここでは、照会で使用されているパラメータをカプセル化しているだけです。
  • サービス層を呼び出すコントローラー入力モデルには*Commandを使用します。

例をいくつ:

// Example of Controller query input model 
public ActionResult Search(SearchProductsQuery query) 
{ 
    ProductSearchViewModel searchView = query.ExecuteWith(productsRepository); 
    return View(searchView); 
} 

// Exmaple of Controller command input model 
public ActionResult Create(CreateProductCommand command) 
{ 
    if (command.Validate(this.ModelState)) 
    { 
     var newProduct = command.CreateProduct(); 
     productRepository.Add(newProduct); 
    } 
    return View(); 
} 
+0

リンクされた記事とあなたの答えの肯定的な価値は単に素晴らしいです! –

関連する問題