C# BLL层或单独层中的数据传输对象?

C# BLL层或单独层中的数据传输对象?,c#,.net,architecture,software-design,n-layer,C#,.net,Architecture,Software Design,N Layer,我有: DAL层->实体和DbContext(实体框架) BLL层->服务 用户界面层->Razor页面 BLL层中的“我的服务”将实体转换为数据传输对象,并将数据传输对象返回到UI层。UI层还将数据传输对象传递给BLL服务 我应该在BLL层中放置数据传输对象还是创建一个单独的层?每个层都应该有自己的模型/视图模型 持久层具有EF实体。这些不应出现在上层。否则,您将永远与EF绑定 BL包含您的域模型。持久层将负责映射实体->域模型(反之亦然) UI有自己的ViewModels并负责映射 现在

我有:

  • DAL层->实体和DbContext(实体框架)
  • BLL层->服务
  • 用户界面层->Razor页面
BLL层中的“我的服务”将实体转换为数据传输对象,并将数据传输对象返回到UI层。UI层还将数据传输对象传递给BLL服务


我应该在BLL层中放置数据传输对象还是创建一个单独的层?

每个层都应该有自己的模型/视图模型

持久层具有EF实体。这些不应出现在上层。否则,您将永远与EF绑定

BL包含您的域模型。持久层将负责映射实体->域模型(反之亦然)

UI有自己的ViewModels并负责映射


现在,有了这一点,您可以设法将域模型类用作EF实体,实现所谓的“持久性忽略”。这通常需要一些“魔法”,通常通过避免属性上任何特定于库的数据注释属性(如[Table]、[ForeignKey]等)来实现。db映射是通过
IEntityTypeConfiguration

处理的。您应该做自己感觉最好、对自己最有意义的事情。规范中没有关于如何构建解决方案的内容,因此这成为一个时尚感问题,而且相当主观。