rest设计API Java
我有一个处理订单的API
OrderResult OrderProcessor.process(OrderRequest req)
我还有一个端点,用户可以在这里发送请求并获得结果。我被要求支持不同的订单类型
现在,这些订单类型可能意味着不同的OrderRequest,也可能有不同的OrderResult
就良好的设计而言,我应该为每个不同的订单提供不同的方法吗
OrderResultABC OrderProcessor.process(OrderRequestABC req)
OrderResultXYZ OrderProcessor.process(OrderRequestXYZ req)
然后提供端点。或者我应该使用抽象并提供一个方法,然后在运行时以不同的方式返回返回类型
AbstractOrderResult OrderProcessor.process(AbstractOrderRequest req)
# 1 楼答案
我认为策略模式将适合这个问题,您希望代码关闭以进行修改,并打开以进行扩展。这意味着您可以添加新的订单类型,但当您希望更改现有订单类型的功能时,它不应影响其他现有订单类型。 你应该使用基于界面的设计
每个功能都需要单独的订单处理器类,以便它们足够独立
参考:https://en.wikipedia.org/wiki/Strategy_pattern
# 2 楼答案
另一种方法是门面模式。这种结构模式使用接口来隐藏复杂性。使用由多个其他具体类实现的一个接口
下面是一个例子:
OrderProcesorABC和OrderProcesorXYZ都实现了Orders接口
在下一步中,名为OrderMaker的facade类将使用具体类将调用委托给这些类
更多信息请参见this link in tutorials point