任意のサイズの整数 ID / GUID / バイト配列は、実際には十分に信頼できますが、有効な理論上の解決策が存在し、ほとんどの場合適用できますが、それらはすべて理論上の要件に対応していません (衝突が発生します)。
私は解決策を次のように定式化します: 同等レベルのシステム協力では、自分のアイデンティティはより高いレベルのシステムによって保証されるべきです. 上位システムは、連携するシステムの存続期間を管理するシステムです。
例:
class John
{
private readonly int id;
public John(int id)
{
this.id = id;
}
public void UseSite(Site site)
{
site.CreateAccount(id, "john");
site.SetPassword(id, "john", "123");
/* ... */
}
}
class Site
{
public void CreateAccount(int humanId, string accName) { /* ... */ }
public void SetPassword(int humanId, string accName, string pwd) { /* ... */ }
/* ... */
}
class Program
{
static void Main(string[] args)
{
Site s = new Site();
// It's easy to guarantee the identity while there's only one object
John j = new John(4);
Console.ReadLine();
}
}
Program
上位モジュールです。正しく使用する責任がJohn
あります。Site
一意の識別子を提供John
することは、この責任の一部です。
人間のようないくつかの現実のシステムのアイデンティティを扱うことは不可能または非常に難しいことに気付くでしょう。これらのシステムがあなたのシステムと同じレベルにある場合に発生します。典型的な例は、人間と Web サイトです。あなたのサイトには、適切な人間がページをリクエストしたという保証はありません。この場合、信頼できるハッシュで確率ベースのアプローチを使用する必要があります。