I\'m now starting out on DDD, I\'ve already found a nice implementation for ValueObject but I cant seem to find any good implementation for Entities, i want a generic base entit
I am not sure if you are after a specific library/sample code or guidelines. A good DDD solution will use factory for instantiation, persistency separated from the domain model (most ORM tends to bundle the two together), clearly define domain boundary, enforcing fields and operations through interface.
I would strongly recommend the book Applying DDD and Patterns book by Jimmy Nilson. It discusses in depth about DDD and best practices. The examples are in C# as well which will suit your project.
The only characteristic of an Entity is that it has a long-lived and (semi-)permanent identity. You can encapsulate and express that by implementing IEquatable<T>
. Here's one way to do it:
public abstract class Entity<TId> : IEquatable<Entity<TId>>
{
private readonly TId id;
protected Entity(TId id)
{
if (object.Equals(id, default(TId)))
{
throw new ArgumentException("The ID cannot be the default value.", "id");
}
this.id = id;
}
public TId Id
{
get { return this.id; }
}
public override bool Equals(object obj)
{
var entity = obj as Entity<TId>;
if (entity != null)
{
return this.Equals(entity);
}
return base.Equals(obj);
}
public override int GetHashCode()
{
return this.Id.GetHashCode();
}
#region IEquatable<Entity> Members
public bool Equals(Entity<TId> other)
{
if (other == null)
{
return false;
}
return this.Id.Equals(other.Id);
}
#endregion
}
For implementation of correct equality operations I recommend to have a look on a base class of domain entities in Sharparchitecture - https://github.com/sharparchitecture/Sharp-Architecture/blob/master/Solutions/SharpArch.Domain/DomainModel/EntityWithTypedId.cs . It has implementation of all required functionality. And have a look on some other code there, IMO, it will be very useful for you and your case.