为Web界面设计IO适配器

时间:2013-12-02 05:08:22

标签: java design-patterns io adapter

我有一个Java应用程序,它由一组服务组成。这些服务需要通过IOAdapter接口处理的I / O,如下所示:

interface IOAdapter {
    void info(Object arg);
    void error(Throwable cause);
    String read(String prompt);
    boolean confirm(String prompt);
}

在服务方法中,使用组合到服务实例中的适配器的某些实现来获得输入。然后,此适配器处理所有I / O(用户交互),从而允许将该关注点与实际业务逻辑分离。

例如,典型的方法方法可以执行以下操作:

class MyService {

    IOAdapter adapter;

    MyService () {
        adapter = new MyAdapter();  // some implementation
    }

    void doSomething() {
        try {
            ...
            String val = adapter.read("Enter a value: ");
            if(adapter.confirm("Are you sure?")) {
                adapter.info("Value entered is: " + val);
                ...
            } else {
                doSomething();
            }
        } catch (Exception e) {
            adapter.error(e);
            ...
        }
    }
}

现在我能够实现一个通过Java控制台执行I / O的适配器。但是,如果我要为通过浏览器进行I / O的基于Web的适配器提供实现,有人可以建议一种可能的方法吗?

是否有其他方法可以更直接地解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望在自己的服务中包含HTTP服务器的功能,实现IOAdapter接口。我认为interface IOAdapterMyService类中编写和使用MyHTTPAdapter的方式并不“美观”。这是因为即使您编写adapter.read,也无法使用HTTP实现read方法。

在HTTP中,我们有两个实体进行通信。 客户端发送,服务器响应。这不能使用您建议的此接口建模,因为您只对一个实体建模并且只有一种方法来交换数据,方法interface。您必须改变界面设计,专注于客户端 - 服务器设计,然后您可以包装HTTP通信。

编辑: 集成两种通信范例(控制台通信和HTTP通信)并非易事。我会提出一个由//This should be implemented by either the HTTP or the console server Adapter interface IOAdapter { IOResponse serveRequest(IORequest request); } //This interface should be implemented by both models of IOAdapter //For example, a subclass of string could also implement this interface in //order to unify the two models interface IORequest { } //This interface should be implemented by both models of IOAdapter //For example, a subclass of string could also implement this interface in //order to unify the two models interface IOResponse { } 强加的设计,遵循HTTP强加的客户端 - 服务器架构,假设控制台应用程序也可以实现它:

{{1}}

希望我帮忙!