我是Eclipse RCP的初学者,我正在尝试为自己构建一个应用程序。我对如何实际处理模型对象感到困惑。我能找到的所有例子都没有解决我遇到的问题,所以我怀疑我的方法是错误的。
假设我需要使用包含经过身份验证的用户信息的类初始化应用程序。我使用WorkbenchWindowAdvisor
(错误的地方?)来执行一些初始化(例如身份验证)以决定要显示的视图。完成后,将显示一个视图。现在,该视图也需要访问我之前检索/生成的用户信息。
问题是,该视图应如何获取该数据?该视图已在plugin.xml
中连线。我没有看到任何方法可以将数据提供给视图。所以我认为视图必须以某种方式检索它。但是从它中检索它的适当位置是什么?我想过将静态变量放在IApplication
实现中,但这感觉不对。任何建议或指示非常感谢。感谢。
答案 0 :(得分:5)
您认为这里遇到的问题与RCP无关。它更像是一个建筑问题。您的观点与业务逻辑相关! 解决方案可以通过两种(常见的)设计模式来完成:
您可以在网上找到有关此内容的大量信息。我将使用MVP为您的特定问题指出一个可能的解决方案。
您需要创建多个项目。一个当然是RCP插件,我们称之为 rcp.view 。现在你创建了另一个,它没有做出贡献(只有org.eclipse.core.runtime开始),并称之为 rcp.presenter 。为简化起见,此插件现在也将成为模型。
后续步骤:
代码:
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);
}
正如您所看到的,视图只是创建了对演示者的引用,演示者负责所有业务逻辑,演示者告诉视图要显示的内容。因此,在您的Perspective中,您实现了这些接口函数,并且在每个接口函数中,您都可以以不同的方式设置Perspective。
对于每个View,它以相同的方式运行,您将需要一个视图的演示者来执行操作并告诉视图(使用界面)显示什么和传递最终数据。视图并不关心逻辑。这在使用JFace-Databindings时非常有用(然后只将绑定数据传递给视图)。 例如,WorkbenchWindowAdisor将只创建应用程序中所需的所有内容。其他视图,透视图,然后可以启用/禁用菜单等,具体取决于他们获得的数据(例如,您可能希望启用特殊的adminMenu是管理员。)
我知道这是一个非常繁重的方法,但Eclipse RCP是专为大型(名称为富)应用而设计的。所以你应该花一些时间在正确的架构上。我的第一个RCP应用程序就像你描述的那样...我从来不知道在哪里存储东西以及如何处理所有引用。在我的工作中,我学到了MVP(我还在学习)。理解这个概念需要一段时间,但它值得。
您可能需要查看my second post at this question以了解如何构建插件。