Java 从EclipseRCP中的一部分分离UI事件侦听:如何正确执行?
我有一个巨大的Java 从EclipseRCP中的一部分分离UI事件侦听:如何正确执行?,java,eclipse,eclipse-plugin,eclipse-rcp,e4,Java,Eclipse,Eclipse Plugin,Eclipse Rcp,E4,我有一个巨大的部分源代码,我必须在一个地方接触。它违反了很多原则,所以我想至少提取我必须修改的函数,它是一个@UIEventTopic处理程序。没有测试,我想在这里添加它们,这样我知道我不会破坏现有的功能 我想离开这一点: public class MyPart { ... @Inject @Optional public void event(@UIEventTopic(EVENT) EventParam p) { ... } } 对这样的事情: public
部分
源代码,我必须在一个地方接触。它违反了很多原则,所以我想至少提取我必须修改的函数,它是一个@UIEventTopic
处理程序。没有测试,我想在这里添加它们,这样我知道我不会破坏现有的功能
我想离开这一点:
public class MyPart {
...
@Inject
@Optional
public void event(@UIEventTopic(EVENT) EventParam p) {
...
}
}
对这样的事情:
public class MyPart {
...
}
public class MyEventHandler {
@Inject
@Optional
public void event(@UIEventTopic(EVENT) EventParam p, MyPart part) {
...
}
}
使用EclipseDI,我看不到创建处理程序类实例的简单方法。它不能是@Singleton
,因为它是一个可以有多个实例的部分
,而将处理程序添加到@PostConstruct
中的@IEclipseContext
很难看,因为它在部分和处理程序之间添加了循环依赖关系。有没有一种神奇的方法可以让我通过e4xmi文件强制执行实例化,或者其他一些方法
我目前的解决方案是将纯粹的功能提取到实用程序bean中,返回数据并在部件上设置,但这也不太好(需要大量额外的空检查、ifs等)。我不完全确定我是否理解您的问题,但是,我将这样做: 提取代理 将
event()
中的代码移动到MyEventHandler
以便MyClass
完全委托事件处理
公共类MyPart{
@注入
@可选的
公共无效事件(@UIEventTopic(event)EventParam param){
新的MyEventHandler().handleEvent(this,param);
}
}
类MyEventHandler{
void handleEvent(MyPart、EventParam参数){
//event()中的所有代码都在这里
}
}
这应该是一个足够安全的重构,不需要测试就可以完成——最后,你没有选择,因为没有测试
确保现状
现在我将为handleEvent()
编写测试,模拟MyPart
所需的方法,从而确保不会破坏现有行为
实施新功能
之后,我将能够以测试驱动的方式对MyEventHandler::handleEvent进行所需的更改
清理
然后,我将从
MyPart
中提取一个接口,该接口只有MyEventHandler
执行其工作所需的那些方法。如果说接口太大,那就意味着还有更多的重构工作要做。Hi Rüdiger,是的,thx很多。最后,我们遇到了类似的情况——期望通过该部分,因为模仿会使测试有点臃肿。所以我们创建了一个结果对象,我正在测试它。Thx的见解。