[英]What is the best/standard way to define a web service interface (inheritance/overloading)?
定义Web服务接口的最佳/标准方法是什么?
例如,
我有两个班级的汽车和公共汽车,它们都扩展了车辆。
如果要公开Car和Bus的create方法,则可以使用以下选项-
编辑 - - - - - - - - - - - - - - - - -
我主要关心的是以上5个选项,这是Web服务API的标准方式。 Java编码的标准可能不是Web服务的标准。
第一个似乎是您可以使用的最通用的,您只需在Car
或Bus
类中覆盖它即可
如果您对标准方式感兴趣,那么这些都不是。
Web服务不支持操作重载,并且在WS BP Profile中被禁止
WS BP
4.5.3 Distinctive Operations
Operation name overloading in a wsdl:portType is disallowed by the Profile.
这实际上是有道理的,因为消息模式(doc / lit)期望将操作名称作为消息有效负载的根进行分配。
另外,您在谈论的是OO概念,但Web服务标准是一种集成技术(不绑定到特定的语言或平台)。
在任何情况下,如果您希望这样做,都可以通过在注释中进行tweeking来实现重载,并且在您的情况下,恕我直言,我认为最好的选择是2
以便消费者知道如何向下转换。
首先,您的方法称为create
,因此按惯例应该是一种工厂方法,因此应返回 Vehicle的实例。 您的方法看起来更像init
因为它们接收了Vehicle,Car,Bus的实例。
因此,我建议您修改签名,例如
Vehicle create(*some arguments*)
现在介绍re型。 我建议您使用基于泛型的定义,例如
<V extends Vehicle> V create()
可以在不强制转换为特定Vehicle子类的情况下调用此方法。
关于争论。 我相信你可以使用
另外,您也可以(按照您的建议)为每种类型的Vehicle创建多个工厂方法,例如createCar
和createBus
但我不喜欢这种方法,因为每次添加新的Vehicle类型时,都必须添加这种方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.