3

私は現在、Entity Framework v4エンティティ(CRUDとGET操作が実装されています)に基づいたリポジトリを持っています。私はこれらのエンティティの対応するビューモデルを作成中です。どこに変換/マッピングを置くべきですか?コントローラでリポジトリを変更し、そのメソッドでマッピングを実行し、View Model型のオブジェクトを返す(または受け入れる)ViewModelオブジェクトからEFモデルエンティティへの変換ここで、

私はで再利用するために起こっている場合、私は、コントローラ上のプライベートメソッドにそれを抽出したり、サービスクラスにそれを置くだろうこの

public ActionResult Index() 
    { 
     var person = new PersonRepository().Get(); 

     var personViewModel = new PersonViewModel(); 
     personViewModel.InjectFrom(person) 
      .InjectFrom<CountryToLookup>(person); 

     return View(personViewModel); 
    } 

またはこの

 public ActionResult Index() 
     { 
      var personViewModel = new PersonRepository().Get(); // returns object of type PersonViewModel 

// and move this to repository 
//   var personViewModel = new PersonViewModel(); 
//   personViewModel.InjectFrom(person) 
//    .InjectFrom<CountryToLookup>(person); 

      return View(personViewModel); 
     } 
+1

valueinjecterを使用しているので、ここからライブデモのソースコードを参照することを強くお勧めします。http://awesome.codeplex.com/、look IBuilder のCruder(Controller)と実装では、 – Omu

答えて

1

私は決してあなたのリポジトリに変換コードを入れません。

  • リポジトリは、他の懸念事項からのデータアクセスを抽象化します。ビューの概要
  • 他の懸案事項からのUI書式設定。

2つを混ぜるだけで、注意深く切り離すことができます。

MVCの本定義は強く変換は、コントローラ内部で行われるべきである意味:

"コントローラが入力を受信し、モデルオブジェクトに呼び出しを行うことにより、応答を開始コントローラは、ユーザからの入力を受け付け、指示しますモデルとビューポートを使用してその入力に基づいてアクションを実行する

3

を行う必要があります他の場所。

一般的でない限り、リポジトリに置くのは良い考えではないと思います。それは私の意見では一般的なリポジトリが岩のためにあるはずです!

関連する問題