0

我试图了解 UI 组件应该如何在 Java 中连接。就常规的“服务器”类而言,我正在尝试使用接口并使用 Spring 注入所有内容。如果是 UI,是否应该使用类似的方法?

更准确地说,让我们考虑以下几点:

class Panel1 extends JPanel{

    public Panel1(Service service, DBConnector db);
}

class Panel2 extends JPanel{

    public Panel1(Delegate delegate, Executor exec);
}

class MainFrame{

    public MainFrame(Service service, DBConnector db, Delegate delegate, Executor exec){
        Panel1 p = new Panel1(service, db);
        Panel1 p = new Panel1(delegate, exec);
    }
}

对比

class MainFrame{

    public MainFrame(Panel1 panel1, Panel2 panel2){
    }
}

我只是想大致了解一下在 UI 世界中什么更合适,如果它与常规类完全不同(可能是因为主框架中可能涉及许多面板)

4

1 回答 1

3

我还没有看到有人在 UI 中使用 DI。这可能是因为 DI 是一个相当新的概念(与构建 UI 相比),或者大多数人在 UI 地狱中生活了一段时间后逃到了MVC,而 MVC 解决了所有问题。

此外,从某种意义上说,大多数 UI 都是静态的,您可以使用按钮打开和关闭窗口/对话框,但不能用另一个对话框替换一个对话框。这会很方便,但前提是我作为用户/消费者可以做到这一点。编写两个执行相同操作的对话框然后使用 DI 连接其中一个或另一个是没有意义的。您要么需要两个不同的对话框,要么只需要一个。

当 UI 支持扩展时(如 Eclipse),它们使用插件系统在运行时加载 UI 元素,其中的代码发现菜单、工具栏等并添加元素。

e4(Eclipse 的最新代码库)将 DI 用于许多事情,但不用于构建 UI。同样,用户界面通常是静态的,因为您永远不会在用户可以从中选择的特定位置拥有两个或更多服务。

因此,使用 DI 可能有意义,但它可能是开创性的工作(即您必须探索可能性空间并自己找到低复杂度的低谷)。

于 2012-12-04T17:12:10.427 回答