【问题标题】:Design pattern for similar request response类似请求响应的设计模式
【发布时间】:2015-01-25 21:40:45
【问题描述】:

我需要设计一个使用请求并产生响应的服务。在结构方面,我希望响应实质上是响应请求并且还包含状态。

例如

请求:

class Request {
String x;
String y;
}

class Response {
String x;
Status x_s;
String y;
Status y_s;
}

有没有人知道任何描述这种情况的模式?一种解决方案可能是使用相同的对象来表示请求和响应,此外还有一个封装值和状态的对象,例如

class Attr {
 Status status;
 String value;
}

class RequestResponse {
Attr x;
Attr y;
}
  • 不过这感觉有点笨拙。例如。 RequestResponse.attr.status 仅适用于响应。
  • 注意,就这方面的impl/usage而言,相对于request/response的结构是一样的,实际上内容会有所不同。我正在尝试实现语言翻译服务。

谢谢。

【问题讨论】:

    标签: design-patterns request response


    【解决方案1】:

    为什么不

    public class Response {
        private Request request; // Has-a relationship
        private Status x_s;
        private Status y_s;
    }
    

    除了任何设计优点之外,这还有一个额外的好处,即您可以“重用”已为请求分配的内存。它还允许您在生成/处理响应时使用 Request 类中定义的功能,如 Request.getRequestType() 或类似的。

    另一种解决方案是让 Response 继承自 request(is-a 关系),但组合方法通常更好

    【讨论】:

    • 谢谢。您的模型是否为客户端提供了一种清晰的方式来确定哪个状态字段与哪个请求字段相关。也就是说,“response.request.x_value”与“response.x_status”有什么关系。干净,我想我的意思是类型安全,不使用反射。
    • 为什么会有相同的值?
    • 它不会有相同的值。这些属性将是相关的。一个将包含一个值,另一个将包含该值的状态。
    • 您可以为 Status 提供对其适用的 Request 字段的引用。这有其缺点;你正在增加耦合,这通常应该避免。无论您以何种方式分割它,都会对您选择的设计做出妥协,并且在不了解更多关于您在做什么的情况下,我无法就哪种妥协更好提供建议。您可能需要考虑从更高的层次重新审视设计。
    猜你喜欢
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多