あなたが説明するように、私は自分のプロジェクトを2つに分けています。
Models フォルダに別の pocos レイヤーを維持することを考えましたが、これは正しくないようです
最終的にこのレイヤーを構築することがわかると思います。
Project.DataとProject.Webの 2 つのプロジェクトがあります。Project.Web には、Project.Data へのプロジェクト参照があります。
- Project.Data.Models: エンティティ
- Project.Web.Models: DTO、ViewModels
私のビューはエンティティを直接参照することはありません。AutoMapper を使用してエンティティを DTO または ViewModel にマップします。これは、独自の名前空間の下のProject.Webにある私のサービスで発生します。私のサービスは Entity 型を返さず、私のビューは ViewModel のみを使用します。
interface IFooService
{
FooDTO GetFoo(int id);
}
public class FooService : IFooService
{
public FooDTO GetFoo(int id)
{
var foo = dbContext.Foo.Where(f => f.Id == id).Select(f => new FooDTO {
Bar = f.Bar,
Blah = f.Blah
}).FirstOrDefault();
// I let AutoMapper take care of the mapping for me
var foo = Mapper.Map<FooDTO>(dbContext.Foo.Where(f => f.Id == id).FirstOrDefault());
return foo;
}
}
コントローラーのアクション:
public ActionResult FooDetails(int id)
{
FooViewModel foo = Mapper.Map<FooViewModel>(fooService.GetFoo(id));
return View(foo);
}
編集:
エンティティをマップするために葯モデルレイヤーを追加=> DTO =>モデルの表示