我正在学习新的Eclipse 4 RCP平台,而我遇到了一个有趣的问题。

假设我正在为Application.e4xmi中定义的MPart设计Part类:

public class SomePartView {
    private Text someText;
    private Button someButton;

    @PostConstruct
    public void createControls(Composite parent) {
        parent.setLayout(new GridLayout(3, false));
        someText = new Text(parent, SWT.BORDER);
        someButton = new Button(parent, SWT.NONE);
        someButton.setText("SomeButton");
    }

    @Focus
    private void setFocus(IEclipseContext context) {
        someText.setFocus();
    }

    // ... getters
}


我正在使用WindowBuilder创建ui,但是我希望它不包含任何行为代码,因此我创建了一个处理交互的类,如下所示:

public class SomePartViewController {

    @PostConstruct
    public void addBehavior(SomePartView view) {
        view.getSomeButton().addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                // do something
            }
        });
    }
}


这是一个好习惯还是我在这里重新发明轮子,而e4已经为此提供了一些解决方案?如果没有,如何将这些课程联系在一起?我想避免在Eclipse上下文之外创建实例。由于正式的e4文档很少,如果有人可以将我的详尽书籍或参考手册链接到我可以找到答案的地方,那也很好。

最佳答案

我不确定能否给您完整的答案,但是我会尝试提出一些提示或意见。

首先,只有应用程序模型所引用的类才能进行依赖注入。因此SomePartView将执行相应的@PostConstruct。但是,在应用程序模型中没有与SomePartViewController的直接连接,因此您不会获得任何自动注入。

您可以通过多种方法来实现此目的,例如通过使用Extending the application model中所述的处理器扩展或通过循环遍历SomePartView的依赖关系并从那里实例化行为类来实现。

如果我的问题正确,那么这将使您无法实现将视图和行为分开的主要目的。

也许XWT是您真正想要的技术。这里,UI是声明式定义的,而事件处理程序仍以Java类实现。我猜想XWT的工作方式已经是一种最佳实践,因为可以将其与创建用户界面的Android编程风格进行比较。

07-24 18:37