2

まず、POCO オブジェクトを定義するドメイン レイヤーを作成し、EF Code First を使用してこれらのドメイン オブジェクトをデータベースに永続化するデータ アクセス レイヤーを作成しました。このプロジェクトの UI が必要になり、MVC 4 プロジェクトを作成しました。厳密に型指定されたビューを作成する必要があるため、ビューに渡すモデルが必要です。

私の質問は、データ注釈を追加できるように、Model フォルダーのどこにドメイン オブジェクトを再作成する必要があるかということです。たとえば、私は顧客を持っています

public class Customer
{
    public int CustomerId { get; set; }
    public int RetailerId { get; set; }
    public string  CustomerName { get; set; }
    public string CustomerEmail { get; set; }
    public int PointsBalance { get; set; }
    public decimal CashBalance { get; set; }

    public ICollection<LoyaltyCard> LoyaltyCards { get; set; }
    public virtual Retailer BusinessName { get; set; }
}

そして、次のような小売業者オブジェクト:

public class Retailer
    {
        public int RetailerId { get; set; }
        public string BusinessName { get; set; }
        public string EmailsAddress { get; set; }
        public int PhoneNumber { get; set; }
        public ICollection<Location> BusinessLocations { get; set; }
        public ICollection<Reward> Rewards { get; set; }
        public Industry Industry { get; set; }
    }

ドメインレイヤーの現在のドメインオブジェクトに注釈を追加する必要がありますか?そうすれば、ドメインオブジェクトをPOCOオブジェクトにするという目的に違反しません。または、Model フォルダーにドメイン オブジェクトを再作成する必要がありますか? -それは重複していないでしょうか。何かポインタがあれば教えてください。

4

2 に答える 2

3

それらを再作成するのではなく、必要なフィールドのみを含むモデルを作成して、注釈を追加できるようにする必要があります。

重複だとおっしゃっていますが、実は関心の分離です。UI が POCO について知っていることが少ないほど良い (理想的な世界では、UI は POCO についてさえ認識せず、ビジネス ロジック レイヤー/API を介してモデルのインスタンスを取得します。

たとえば、以下を見てくださいCustomerViewModel。いくつかのプロパティが欠落していることに気付きましたか? 大まかな例であることは承知していますが、新しい顧客を追加したり表示したりするときに、実際にはすべてのプロパティを入力したくない場合があるため、その目的に最適な縮小バージョンを次に示します。

public class CustomerViewModel
{
    [Required]
    public int CustomerId { get; set; }

    [Required]
    public int RetailerId { get; set; }

    [Required]
    public string  CustomerName { get; set; }

    [Required]
    public string CustomerEmail { get; set; }
}
于 2013-10-01T22:17:19.723 に答える
2

これが ViewModel の出番です。これらのモデルは、ドメイン モデルのデータをビューに表示するために使用されますが、ビューを表示するために必要なプロパティのみが含まれています。検証を処理するこれらのプロパティにデータ注釈を追加できます。

AutoMapperを使用してドメイン モデルを ViewModel にマップすることをお勧めします。

于 2013-10-01T22:25:25.590 に答える