2016-11-14 4 views
0

私はそれは基本的に付属評価のための質問と回答のリストを取得し、それらを割り当てMVCどこで私のviewmodelを設定するコードを置くのですか?

public AssessmentResponseVM ConfigureAssessmentViewModel(AssessmentResponseVM model) 
{ 
    if (model.AssessmentID != null) 
    { 
     model.Questions = getQuestionAndAnswerList(model.AssessmentID); 
    }else 
    { 
     model.Questions = getQuestionAndAnswerList(null); 
    } 

    return model; 
} 

私のコントローラ内でこのメソッドを呼び出して、エンティティ

からのデータを移植する必要があるのviewmodelを持っていますビューモデルのプロパティへこのConfigureAssessmentViewModelメソッドはどこに住んでいますか?現時点では私のコントローラーに座っていますが、私はそこに気に入っているのか分かりません。それはビューモデルクラスまたは他の場所に置かなければなりませんか?あなたは自分のコントローラにこのロジックを維持し、質問の列挙を返す必要があります。この場合

+0

これは適切であると考えられています。マッピングはコントローラにのみ適用される可能性が高いので、コントローラ内のプライベートメソッドは別のサービスに移動するので、うまくいくでしょう。しかし、それはあなたのビューモデルクラスに含まれるべきではありません。それはビューモデルにコンテキストを注入することなくユニットテストにコードを不可能にします。ビューモデルには関連するデータモデルの知識がなくてはなりません(その逆もあります) –

答えて

0

var questionsAndAnswersList = getQuestionAndAnswerList(model.AssessmentID); 

はまた、あなたがnull AssessmentIDをチェックするが、その後、とにかくgetQuestionAndAnswerListにnullを渡していることに注意してください。

、あなたのビューでは、また、質問だけを表示する方法を知っている、ここで別のビューを望むかもしれ

@model IEnumerable<Question> 

を使用する必要があります。表示/エディタテンプレートのthis other questionを参照してください。

getQuestionsAndAnswerListは、データにアクセスしてコントローラが使用方法を知っているものに変換する方法を知っているサービス/ビジネスロジッククラスに属しています。 ViewModelクラスとServiceクラスをどのように分離するかは、実際にはアプリケーションとプリファレンスのサイズによって決まります。

0

良い答えはかなり網羅的ですが、基本的にはオブジェクトマッピングレイヤーの一部です。私はこれを別々に扱うさまざまなアーキテクチャを見てきました。通常、最良のことは一貫していることです。

私のビジネスモデルとビューモデルは2つの異なる構造であり、ビューモデルはコントローラのビューまたは時には少数のビューに合わせて調整されているため、コントローラはビ​​ューモデルをビジネスモデル。これは、私のアプローチでは通常、データアクセス層、ビジネス層、およびビュー層(コントローラ、ビューモデル、ビューで構成されています)が含まれるためです。

私のコントローラにはビジネスロジックがありません。そのため、ビジネスレイヤを呼び出すこと、ビジネスモデルを取得すること、およびビューモデルにビジネスレイヤからデータを入力することは、非常に細いものです。

コントローラは、UIとビジネスレイヤーの間の接着剤のようなものです。

したがって、この場合、ViewModelでデータを設定するだけの単純なことがあって、何らかの理由で複数のコントローラのアクションで再利用する必要がある場合は、コントローラーの私的な機能

異なるアーキテクチャで作業している場合は、適切でない可能性があります。私は、ビジネスレイヤーがビジネスモデルではなくViewModelsを返し、ビジネスモデルでマッピングが発生したケースを見てきました。

既存のアーキテクチャーで作業していた場合は、そのコードをプライベート関数として最初にビューモデルを作成するクラスと同じクラスに配置します。クラスが含まれていますnew AssessmentResponseVM(...

関連する問題