【问题标题】:Data Transfer Objects in BLL layer or a separate layer?BLL 层或单独层中的数据传输对象?
【发布时间】:2021-03-08 01:56:30
【问题描述】:

我有:

  • DAL 层 -> 实体和 DbContext(实体框架)
  • BLL 层 -> 服务
  • UI 层 -> Razor 页面

我在 BLL 层的服务将实体转换为数据传输对象,并将数据传输对象返回给 UI 层。 UI 层还将数据传输对象传递给 BLL 服务。

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

【问题讨论】:

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

标签: c# .net architecture software-design n-layer


【解决方案1】:

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

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

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

UI 有自己的 ViewModel 并负责映射。

现在,话虽如此,您可以设法将域模型类用作 EF 实体,从而实现所谓的“持久性无知”。这通常需要一些“魔法”,通常通过避免属性上的任何类型的库特定数据注释属性(如 [Table]、[ForeignKey] 等)来完成。 db 映射通过IEntityTypeConfiguration 处理。

【讨论】:

    猜你喜欢
    • 2010-12-23
    • 1970-01-01
    • 2011-04-10
    • 2013-11-15
    • 2012-12-02
    • 2013-11-13
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    相关资源
    最近更新 更多