4

私は経験豊富な MVC3 開発者ではありませんが、そうなろうとしています。前者はデータベースの各クラスを記述し、後者は mvc3 の厳密な型のビューに使用されるため、私は POCO クラスと ViewModel にも精通しています。私の質問は、経験豊富な開発者にとってそれほど複雑ではありませんが、それについて少し混乱しています。

問題は、3 つのプロジェクトを含むソリューションがあることです。

  1. POCO クラスを記述した Model クラス ライブラリ。次に例を示します。

.

public class Service
    {
        [Key]
        [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
        public int ServiceID { get; set; }
        //------------------------------------------------------------//
        [Required, MaxLength(30)]
        [LocalizedAttribute("Name")]
        public string Name { get; set; }
        //------------------------------------------------------------//
        [MaxLength(100)]
        [LocalizedAttribute("Description")]
        public string Description { get; set; }
        //------------------------------------------------------------//
        [Required]
        public long ModifiedByUserID { get; set; }
        [ForeignKey("ModifiedByUserID")]
        public virtual User OperatorUser { get; set; }
        //------------------------------------------------------------//
        [Required, MaxLength(10)]
        public int ModifiedDate { get; set; }
    }
  1. リポジトリと UnitOf Work クラス ライブラリ

  2. MVC アプリケーション

さて、私は POCO クラスに正しく対処しましたか? (もちろん、EF Code First を使用してデータベースを生成しています)もしそうなら、ViewModels としても推論されますか? それらを使用して、厳密に型付けされたビューを生成しました。

POCOクラスとViewModelを定義するための最良かつ実際に標準的な方法は何ですか?

親切なご指導をいただければ幸いです。

4

3 に答える 3

7

正直なところ、それはプロジェクトのサイズによって異なります。

Microsoft の例のほとんどを見ると、例が小さなプロジェクトであるという理由だけで、POCO をモデルとして使用しています。

ただし、エンタープライズレベルのアプリケーションに近いものを開発している場合は、POCO をモデルとして使用するべきではありません懸念事項を明確に分離する必要があります。厳密に言えば、これらのシナリオでは、Web プロジェクトは POCO オブジェクトについても認識すべきではありません。典型的な実装は、POCO とビュー モデルの両方が実装して表示できる共通のインターフェイスです。そうすれば、POCO オブジェクトを Web レイヤーに公開する手間を省くことができます。

于 2013-06-05T09:45:18.373 に答える
3

ViewModel は、データ (Poco) とビューの間の中間層であり、通常、UI を制御するための追加のロジックが含まれています。

ViewModel に特定のデータがない場合、Poco を ViewModel として使用しない理由がわかりません。

それ以外の場合、データを Poco として保持するには、Poco クラスと同じフィールドを持つ ViewModel を作成し、Automapper を使用して Poco->ViewModel、ViewModel->Poco 変換を行うことができます。

于 2013-06-05T08:41:47.133 に答える
2

mt_serg に同意します。私のアプリケーションでは、簡単なケースであれば、POCO クラスを直接使用します。ただし、私のビューで、たとえばデータベースから入力されたドロップダウン リストも表示する必要がある場合は、POCO クラスと追加のリストを含む ViewModel を作成し、コントローラーから渡されたビューで VM を使用します。ただし、作業をやり直して、POCO と同じフィールド + 追加フィールドを使用して VM を作成することはしません。自分で変換を処理する必要がなく、MVC フレームワークにそれを整理してもらうので、この方法がうまくいくことがわかりました。お役に立てれば

于 2013-06-05T09:39:59.350 に答える