我是 Eclipse RCP 的初学者,我正在尝试为自己构建一个应用程序来尝试一下。我对如何实际处理模型对象感到困惑。我能找到的例子都不能解决我遇到的问题,所以我怀疑我的处理方式是错误的。
假设我需要使用保存经过身份验证的用户信息的类来初始化应用程序。我用我的WorkbenchWindowAdvisor
(错误的地方?)执行一些初始化(例如身份验证)来决定显示什么视图。完成后,将显示一个视图。现在,那个观点also需要访问我之前检索/生成的用户信息。
问题是,该视图应该如何获取这些数据?视图连接在plugin.xml
。我看不出有什么方法可以将数据提供给视图。所以我假设视图必须以某种方式检索它。但是它从哪里检索它的正确位置呢?我想到将静态变量放入IApplication
实施,但感觉不对。非常感谢任何建议或指示。谢谢。
我认为您在这里面临的问题与 RCP 无关。它更多的是一个建筑问题。您的观点与业务逻辑紧密相连!
该解决方案可以通过两种(常见)设计模式来完成:
- 模型-视图-控制器 (MVC)
- 模型-视图-呈现器 (MVP)
您可以在网络上找到大量相关信息。我将使用 MVP 为您的特定问题指出一个可能的解决方案。
您将需要创建多个项目。一个当然是 RCP 插件,我们称之为rcp.view。现在您创建另一个,它不做出 UI 贡献(仅从 org.eclipse.core.runtime 开始)并调用它rcp.presenter。为了简化事情,这个插件也将成为目前的模型。
下一步:
- 将 rcp.presenter 添加到依赖关系rcp.view(其
重要的是演示者没有
参考视图)
-
Export你是的所有包裹
将在 rcp.presenter 中创建
所以它们是可见的
- 在rcp.presenter中创建一个接口视角有一些方法
喜欢 (showLogiDialog()、showAdministratorViews(用户用户)、showStandardViews(用户用户))
- 创建一个类观点演讲者这需要视角在构造函数中并将其保存在属性中
- 在 rcp.view 中转到您的透视图,实现你的接口IPerspective,并在构造函数中创建一个新的引用演示者 = 新视角演示者(this)
- call 演示者.load()并实施
演示者中的这个可能是这样的
code:
public void load()
{
User user = view.showLoginDialog(); // returns a user with the provided name/pw
user.login(); // login to system/database
if(user.isAdministrator())
view.showAdministratorViews(user);
else
view.showStandardViews(user);
}
正如您所看到的,视图只是创建对演示者的引用,演示者负责所有业务逻辑,并且演示者告诉视图要显示什么。因此,在您的视角中,您可以实现这些接口函数,并且在每个函数中,您都可以以不同的方式设置您的视角。
对于每个视图,它都以相同的方式进行,您将需要一个视图的演示者来执行操作并告诉视图(使用界面)显示什么并传递最终数据。视图不关心逻辑。当使用 JFace-Databindings 时,这也非常有用(然后只有绑定数据传递到视图)。
例如,WorkbenchWindowAdisor 将只创建应用程序中所需的所有内容。其他视图、透视图可以根据它们获得的数据启用/禁用菜单等(例如当 isAdministrator 时,您可能想要启用特殊的 adminMenu)。
我知道这是一个相当繁重的方法,但 Eclipse RCP 是为大型(顾名思义,丰富)应用程序而设计的。所以你应该花一些时间在正确的架构上。我的第一个 RCP 应用程序就像您所描述的那样......我从来不知道在哪里存储东西以及如何处理所有引用。在工作中我了解了 MVP(而且我仍在学习中)。理解这个概念需要一段时间,但这是值得的。
您可能想看看我在这个问题上的第二篇文章 https://stackoverflow.com/questions/1050889/using-hibernate-with-dynamic-eclipse-plug-ins/1075201#1075201了解如何构建插件的另一个想法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)