我正在尝试在脑海中实施 DDD 方法。到目前为止,我知道实体是唯一的,并通过其属性的组合来识别。
实体是抽象类,将由其他实体类实现。
到目前为止,我知道 Version 属性用于管理并发性。在本课程的其余部分需要帮助。
我正在学习 DDD,所以请描述您对此的想法或分享有用的具体主题链接。
public abstract class Entity<T>
{
#region Properties
protected T _Id;
private int _Version;
#endregion
private static bool IsTransient(Entity<T> obj)
{
return (obj != null) &&
Equals(obj.Id, default(T));
}
private Type GetUnproxiedType()
{
return GetType();
}
public virtual T Id
{
get
{
return _Id;
}
protected set
{
_Id = value;
}
}
public virtual int Version
{
get
{
return _Version;
}
set
{
_Version = value;
}
}
public override bool Equals(object obj)
{
return Equals(obj as Entity<T>);
}
public virtual bool Equals(Entity<T> other)
{
if (other == null) return false;
if (ReferenceEquals(this, other)) return true;
if (!IsTransient(this) &&
!IsTransient(other) &&
Equals(Id, other.Id))
{
var otherType = other.GetUnproxiedType();
var thisType = GetUnproxiedType();
return (thisType.IsAssignableFrom(otherType)
|| otherType.IsAssignableFrom(thisType));
}
return false;
}
public override int GetHashCode()
{
if (Equals(Id, default(T)))
{
return base.GetHashCode();
}
return Id.GetHashCode();
}
public static bool operator ==(Entity<T> e1, Entity<T> e2)
{
return Equals(e1, e2);
}
public static bool operator !=(Entity<T> e1, Entity<T> e2)
{
return !Equals(e1, e2);
}
}
更新
经过一番研究,我得出结论
当我们尝试比较两个对象时,使用 Equals 方法会很方便。例如,应用程序中的成像位置,我们在多个实例中拥有相同的对象。一份来自数据库,一份来自客户端。我们需要找出该对象是否相同但又不相同。
为此,我们将使用 Equals 方法。