Result
私は、特定の基本情報、特に一意のIDをすべて提供する汎用タイプのsをポンプできるWebサービスAPIを使用しています。その一意のIDは、送信者によって定義される傾向がありますが、必須UUID
ではありません。送信者は常に同じ人物であるとは限りません(ただし、IDはシステム全体で一意です)。
基本的に、APIはこれに沿ったものになります(Javaで記述されていますが、言語は無関係である必要があります)。ここでは、基本インターフェースのみが共通の詳細を表します。
interface Result
{
String getId();
}
class Result1 implements Result
{
public String getId() { return uniqueValueForInstance; }
public OtherType1 getField1() { /* ... */ }
public OtherType2 getField2() { /* ... */ }
}
class Result2 implements Result
{
public String getId() { return uniqueValueForInstance; }
public OtherType3 getField3() { /* ... */ }
}
Result
それぞれのタイプが完全に異なる種類の情報を表す場合があることに注意することが重要です。他のsと相関できないものもあればResult
、同じタイプであるかどうかに関係なく、相関できるものもあります(たとえば、Result1
と相関できる可能性があるためResult2
、その逆もありますが、ResultX
異なる情報)。
現在、これらのいくつかを受け取り、可能な場合はそれらを相互に関連付けるシステムを実装しています。これにより、相互に関連付けられたもののコンテナであるResult
別のオブジェクトが生成されます。Result
class ContainerResult implements Result
{
public String getId() { return uniqueValueForInstance; }
public Collection<Result> getResults() { return containedResultsList; }
public OtherType4 getField4() { /* ... */ }
}
class IdContainerResult implements Result
{
public String getId() { return uniqueValueForInstance; }
public Collection<String> getIds() { return containedIdsList; }
public OtherType4 getField4() { /* ... */ }
}
これらは2つのコンテナーであり、異なるユースケースを示します。最初の、ContainerResult
は、相関関係のある詳細と実際の完全な相関関係のあるデータを誰かが受け取ることを可能にします。2番目の、IdContainerResult
は、関連付けられたIDのみを送信することにより、帯域幅を優先して完全なリストを犠牲にします。相関を行うシステムは必ずしもクライアントと同じである必要はなく、クライアントはResult
それらのIDが表すを受け取ることができます。これは、IDを受け取るだけでシステム上で相関を示すことができるようにすることを目的としています。
さて、私の問題は一部の人には自明ではないかもしれませんし、他の人には自明かもしれません:の一部としてIDのみを送信する場合IdContainerResult
、クライアントResult
は、単一のIDストア?各実装によって実際に表されるデータのタイプは、Result
相関できない場合に分離されるのに役立ちます。つまり、ほとんどの場合、メモリやストレージに負担をかけずに単一のIDストアを使用することはほとんどありません。
私たちが思いついた現在のソリューションでは、新しいタイプのIDを作成する必要があります。TypedId
これを、と呼びます。これは、それぞれのXML名前空間とXML名をのIDと組み合わせたものResult
ですResult
。
そのソリューションに関する私の主な問題は、IDが任意のクライアントのシステムに適切に関連付けられるように、検出時に更新されるタイプの可変コレクションを維持するか、すべてのタイプの事前知識が必要になることです。残念ながら、私はより良い解決策を思い付くことができませんが、現在の解決策は間違っていると感じています。
Result
特にWSDLの制限を念頭に置いて、ジェネリックを元のタイプに関連付けて、よりクリーンな方法で解決したいという同様の状況に直面したことはありますか?