【问题标题】:Is it a bad practice to use mutable records for database entities?对数据库实体使用可变记录是一种不好的做法吗?
【发布时间】:2023-02-24 16:23:26
【问题描述】:

C# 9.0 为更多面向数据的结构引入了记录。我想将它们用于与某种 ORM(如 Dapper)一起使用的实体对象,因为它们提供了许多有用的功能,例如基于值的相等性。我相信一个建议或良好做法是保持记录不可变(仅限 init),但这意味着在更改业务逻辑中的实体时需要进行大量复制操作。使用它是一种可接受的做法吗可变的数据库实体的记录?

【问题讨论】:

  • 是的,如果你想让它不可变,你可以使用 readonly 关键字。
  • 我不想让它们不可变,我想让它们可变,但我认为这违反了保持记录始终不可变的最初想法。另一方面,我认为没有理由使用具有自我实现的 equals 方法的类而不是可变记录。

标签: c# database entity record dapper


【解决方案1】:

这是我认为问题所在:您想要使用可变记录,因为您想要更改业务逻辑中的数据库实体。这立即取消了这些对象作为纯数据库实体的资格。您现在应该将它们视为领域恰好与您的数据库对象 1:1 匹配的实体。

这是错误的吗?不必要。但它与您在应用程序层中处理这些对象的方式与它们在数据库中的存储方式紧密相关。在很多情况下这不是一个好主意。域和持久性是两个不同的世界。所以,你可能需要考虑一下。

现在,您应该为域实体使用可变记录吗?我认为这样做没有问题。但它可能/不应该就此结束。典型的领域实体应该有一些封装在其中的逻辑(行为)。这至少是领域驱动设计的本质。因此,您不仅在记录中拥有可变属性,而且还将拥有自定义方法。同样,在您希望从随记录获得的自动生成的代码中获益的情况下,我认为这样做没有问题。但就个人而言,我只会在绝对需要时才会这样做。否则,我将只使用类。

【讨论】:

    猜你喜欢
    • 2019-08-01
    • 2019-12-30
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多