我使用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