我使用Web服務API,可以通過一般類型的Result
來抽取所有提供某些基本信息,最顯着的是唯一的ID。這個唯一的ID往往是 - 但並非必須是 - 由發件人定義的UUID
,並不總是同一個人(但ID在整個系統中是唯一的)。Web服務投稿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
類型可能代表一種完全不同的信息。一些它不能與其他Result
s內相關,並且它的一些可以,無論它們是否具有相同的類型(例如,Result1
可以是能夠與Result2
相關,並且因此反之亦然,但一些ResultX
可能存在不能相關因爲它代表不同的信息)。
我們目前正在執行接收一些那些Result
S和在可能關聯他們的系統中,其產生不同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() { /* ... */ }
}
這些是兩個容器,其中呈現不同的用例。首先,ContainerResult
允許某人接收相關詳細信息以及實際完整的相關數據。第二個,IdContainerResult
,僅通過發送關聯的ID來犧牲完整的列表,以支持帶寬。在做相關的系統不一定是一樣的客戶端,客戶端可以接收Result
s表示這些ID將代表,其目的是讓他們通過簡單地接收的ID,以顯示他們的系統相關性。現在
,我的問題可能是無明顯一些,這可能是顯而易見別人:如果我只發送ID爲IdContainerResult
的一部分,那麼客戶機如何知道如何在他們的最終匹配Result
如果他們沒有一個單一的ID店?實際上是由每個Result
實現所表示的數據的類型借給自己時它們不能被相關,這意味着單個ID店不太可能在大多數情況下,不強制存儲器或存儲負擔被分離。
目前的解決方案,我們已經來到了限嗣繼承創建一個新的ID類型的,我們把它叫做TypedId
,它結合了來自各Result
與Result
的ID XML命名空間和XML名稱。
該解決方案的主要問題是它需要維護一個可變類型的集合,這些類型在發現它們時會進行更新,或者是所有類型的先前知識,以便可以在任何客戶端系統上正確關聯該ID。不幸的是,我不能拿出一個更好的解決方案,但目前的解決方案覺得不妥。
有沒有人遇到類似的情況,他們希望將通用Result
與原始類型關聯起來,特別是考慮到WSDL的侷限性,並以更清晰的方式解決它?
我認爲4D代表,我想代替要求每個人對於延長'Result',作爲當前架構劑量的答案,但架構的一部分已經鐵定多年。相關的ID表示一種新的「結果」類型。不幸的是,這聽起來像我無法避免匹配類型和ID的情況,並強迫所有類型的知識傳遞給客戶端。但是,正如您在答案結論中適當指出的那樣,代碼必須知道如何處理數據,無論如何。我認爲這只是野獸的本質。非常完整的答案。 – pickypg 2013-03-15 20:03:06