私は頭の中で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);
}
}
更新しました
いくつかの調査の後、私はこれで結論付けました
2 つのオブジェクトを比較しようとする場合、Equals メソッドを使用すると便利です。たとえば、複数のインスタンスに同じオブジェクトがあるアプリケーションの場所をイメージングします。1 つはデータベースから、もう 1 つはクライアントからです。そのオブジェクトが同一でありながら同じではないかどうかを調べる必要があります。
これには、Equals メソッドを使用します。