3

私は最初の MVC プロジェクトを作成していますが、Code First Entity Classes をビュー モデルに公開する正しい方法はどれか知りたいと思っていました。私は次のようなエンティティクラスを持っています:

public class Product
{
    public int Id { get; set; }
    public int CategoryId { get; set; }
    [StringLength(50)]
    public string ProductName { get; set; }
    public Nullable<System.DateTime> DateAdded { get; set; }
    [StringLength(50)]
    public string AddedBy { get; set; }
}

オブジェクトを渡すのと、プロパティの新しいクラスを渡すのとではどちらがよいでしょうか?

public class ProductViewModel
{
    Product myProduct { get; set; }
}

public class ProductViewModel
{
    public int Id { get; set; }
    public int CategoryId { get; set; }
    public string ProductName { get; set; }
    public DateTime DateAdded { get; set; }
    public string AddedBy { get; set; }
}
4

3 に答える 3

1

2番目のオプションを使用することをお勧めします。一般に、データベース クラスをモデルとして使用することはお勧めできません。最初のオプションが本質的に行うことは、別の無意味なクラス内にラップすることを除いて、まさにそれです。

私がしたいことは、両方にインターフェースを実装させることです。そのように変更したい場合は、インターフェースを変更するだけで、両方のインスタンスを変更できます。

public class ProductViewModel : IProduct
{
    public int Id { get; set; }
    public int CategoryId { get; set; }
    [StringLength(50)]
    public string ProductName { get; set; }
    public DateTime DateAdded { get; set; }
    [StringLength(50)]
    public string AddedBy { get; set; }
}
于 2013-03-27T19:32:32.340 に答える
0

私は間違いなく2番目のオプションを選びます。これにより、ドメイン モデル (エンティティ) とビュー モデルが明確に分離されます。これらのモデルを分離することは、次の理由で重要です。

  • 対処すべき2つの非常に異なるタイプの懸念があります
    • ドメインは、ドメイン ロジック、つまりアプリケーションのデータの管理に関連する実際のビジネス プロセスを扱います。
    • ビューはビュー ロジックに重点を置いており、そのデータを操作するための優れたユーザー インターフェイスを提供します。
  • ドメイン層とインターフェース層の開発作業を分離できます。あるレイヤーの小さな変更が他のレイヤーに与える影響を最小限に抑えたいと考えています。

確かに、この例では些細なことですが、ビューにさらにロジックを組み込むと非常に重要になります。

于 2013-03-27T19:33:00.547 に答える
0

エンティティ クラス全体を渡す方がよいでしょう。そうすれば、クラスが変更された場合でも、ViewModel のプロパティを更新する必要はありません。

于 2013-03-27T19:33:38.277 に答える