注意:我使用C#作为例子,但在Java和许多其他语言中,问题实际上是相同的。
假设您实现了一个值对象(如M. Fowler的值对象模式),它有一些可为空的字段:
class MyValueObject
{
// Nullable field (with public access to keep the example short):
public string MyField;
}
当覆盖 Equals() 方法时,如果两个值对象的 MyField 都设置为 null,你应该如何处理?它们相等还是不相等?
在 C# 中,把它们视为相等似乎很明显,因为:
This is the behaviour of Equals() when you use a C# struct instead of a class and do not override Equals().
The following expressions are true:
null == null object.ReferenceEquals(null, null) object.Equals(null, null)
NULL = NULL
为false,而NULL is NULL
为true 。我想知道在使用O / R映射器(在我的情况下是NHibernate)时期望什么实现。如果你实现“自然”的C#相等语义,当O / R映射器将它们映射到数据库时会有任何不良影响吗?或者允许值对象中的可空字段本来就是错误的?