的我已經看到了一些DDD的帖子確實書籍,其中實體類是由某種形式的基類的具有用於實體身份類型,泛型參數得出的:實體標識 - 使用字符串而非類型
public interface IEntity<out TKey>
{
TKey Id { get; }
}
public interface IComplexEntity<out TKey, in TEntity>
{
TKey Id { get; }
bool IsSameAs(TEntity entity);
}
//Object Definition
public class TaxPayer : IComplexEntity<string, User>
{
...
}
在弗農的實施領域驅動設計,特定類型的使用創建爲身份:
public class TaxPayerIdentity : Identity
{
public TaxPayerIdentity() { }
public TaxPayerIdentity(string id)
: base(id)
{
}
}
最近我一直在努力的事件總線外部聽衆的交流活動。該「問題」我是我需要一個通用的消息格式的事件信封發送:
public EventEnvelope
{
long EventStoreSequence; // from the event store
bool IsReplay; // if event store is replaying from position 0 of stream
object EventBeingSent; // this is the actual event, i.e. class AddressChanged { string Old; string New; DateTime On; }
object IdentityOfSender; // this is the identity of the entity who raised the event
}
以上的IdentityOfSender
是一個對象,但實際值將是string
,int
,Guid
等根據對象身份類型。
我的問題是爲什麼不簡單地使用字符串作爲身份?畢竟,Guids,整數,名稱,數字都可以表示爲字符串,並且它們可以很容易地與通用格式的字符串進行比較 - 這不僅會使EventEnvelope更易於使用字符串作爲通用格式,還會使實體更容易無需基類或特殊類型的句柄?
總之,爲什麼人們不推薦使用字符串作爲通用格式(或者我沒有見過),而是談論基類和通用類型的身份?