Mar*_*ein 5 nhibernate null domain-driven-design equals value-objects
注意:我以 C# 为例,但在 Java 和许多其他语言中问题几乎相同。
假设您实现了一个值对象(如M. Fowler 的值对象模式)并且它有一些可为空的字段:
class MyValueObject
{
// Nullable field (with public access to keep the example short):
public string MyField;
}
Run Code Online (Sandbox Code Playgroud)
然后,当覆盖 Equals() 时,您如何处理两个值对象的 MyField 都设置为 null 的情况?它们是否相等?
在 C# 中,平等对待它们似乎很明显,因为:
这是当您使用 C# 结构而不是类并且不覆盖 Equals() 时 Equals() 的行为。
以下表达式为真:
null == null
object.ReferenceEquals(null, null)
object.Equals(null, null)
Run Code Online (Sandbox Code Playgroud)然而,在 SQL 中(至少在 SQL Server 的方言中),NULL = NULL是假的,反之则NULL is NULL是真的。
我想知道在使用 O/R 映射器(在我的例子中是 NHibernate)时需要什么样的实现。如果你实现了“自然”的 C# 相等语义,当 O/R 映射器将它们映射到数据库时会不会有任何不良影响?
或者也许允许值对象中的可为空字段无论如何都是错误的?
| 归档时间: |
|
| 查看次数: |
1370 次 |
| 最近记录: |