在 Eclipse RCP 应用程序中在哪里存储“全局”数据?

2024-02-17

我是 Eclipse RCP 的初学者,我正在尝试为自己构建一个应用程序来尝试一下。我对如何实际处理模型对象感到困惑。我能找到的例子都不能解决我遇到的问题,所以我怀疑我的处理方式是错误的。

假设我需要使用保存经过身份验证的用户信息的类来初始化应用程序。我用我的WorkbenchWindowAdvisor(错误的地方?)执行一些初始化(例如身份验证)来决定显示什么视图。完成后,将显示一个视图。现在,那个观点also需要访问我之前检索/生成的用户信息。

问题是,该视图应该如何获取这些数据?视图连接在plugin.xml。我看不出有什么方法可以将数据提供给视图。所以我假设视图必须以某种方式检索它。但是它从哪里检索它的正确位置呢?我想到将静态变量放入IApplication实施,但感觉不对。非常感谢任何建议或指示。谢谢。


我认为您在这里面临的问题与 RCP 无关。它更多的是一个建筑问题。您的观点与业务逻辑紧密相连! 该解决方案可以通过两种(常见)设计模式来完成:

  1. 模型-视图-控制器 (MVC)
  2. 模型-视图-呈现器 (MVP)

您可以在网络上找到大量相关信息。我将使用 MVP 为您的特定问题指出一个可能的解决方案。

您将需要创建多个项目。一个当然是 RCP 插件,我们称之为rcp.view。现在您创建另一个,它不做出 UI 贡献(仅从 org.eclipse.core.runtime 开始)并调用它rcp.presenter。为了简化事情,这个插件也将成为目前的模型。

下一步:

  1. 将 rcp.presenter 添加到依赖关系rcp.view(其 重要的是演示者没有 参考视图)
  2. Export你是的所有包裹 将在 rcp.presenter 中创建 所以它们是可见的
  3. 在rcp.presenter中创建一个接口视角有一些方法 喜欢 (showLogiDialog()、showAdministratorViews(用户用户)、showStandardViews(用户用户))
  4. 创建一个类观点演讲者这需要视角在构造函数中并将其保存在属性中
  5. 在 rcp.view 中转到您的透视图,实现你的接口IPerspective,并在构造函数中创建一个新的引用演示者 = 新视角演示者(this)
  6. 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(使用前将#替换为@)

在 Eclipse RCP 应用程序中在哪里存储“全局”数据? 的相关文章

  • Eclipse 自动完成更改变量名称

    只是一个愚蠢的问题 但很难搜索 因为有很多关于 Eclipse 自动完成的主题 而且很难找到与我的问题匹配的内容 所以问题是 如果我写 MyClass MyVarName 然后按空格键 添加 new MyClass Eclipse 自动添加
  • AlertDialog setButton 已弃用

    我在我的 Eclipse Android 项目中使用此代码 alertDialog setButton OK new DialogInterface OnClickListener Override public void onClick
  • Java 7 中 Object 和 int 的比较

    最近我偶然发现了一个问题 让我停下来思考 对我来说 下面的代码应该总是会触发错误 但是当我的一位同事问我为什么 Eclipse 没有显示错误时 我无法回答任何问题 class A public static void main String
  • java 1.8下无法启动eclipse

    java 1 8 升级后我无法启动 eclipse 附上错误截图 这是我的 eclipse 配置设置 我该如何解决 startup plugins org eclipse equinox launcher 1 3 0 v20120522 1
  • 配置 OPC UA 服务器 (Milo)?

    我刚刚查看了 Eclipse Milo 项目 https projects eclipse org proposals milo https projects eclipse org proposals milo 这对于 开放 OPC UA
  • android eclipse 中显示的是单独的屏幕而不是 tabhost

    我是android的自学者 我有两个屏幕 第一个屏幕包含一个编辑文本和一个按钮 编辑文本用于获取用户的输入 按钮用于调用第二个屏幕上的 tabhost 活动 在运行时 收到用户输入后 它应该显示适当的值 根据用户的输入 到第二个屏幕上的 t
  • 将 Tomcat 插件添加到 Flex Builder

    无论如何 我们可以将 tomcat eclipse 插件添加到 Adob e Flex Builder 3 中吗 换句话说 我们可以将所有 Eclipse 插件也添加到 Flex Builder 中吗 我不确定 Tomcat 的情况如何 但
  • Android 模拟器问题

    当我启动模拟器时 我遇到很多问题 错误 HttpConnectionApp emulator 5554 disconnected Cancelling net paxcel http HttpConnectionApp activity l
  • 在 Eclipse 中删除空块之前的新行

    我更喜欢奥尔曼式 http en wikipedia org wiki Brace style Allman style大括号 例如 if foo magical prancing unicorn stuff 而不是 if foo unma
  • Eclipse Oxygen - 项目消失

    为什么项目会从 Oxygen 的项目资源管理器中消失 启动 Eclipse 后我可以短暂地看到它们 但随后它们就消失了 无法重新添加或导入它们 因为它表示它们已经存在 我将项目从 git 重新克隆到另一个目录中 删除了 classpath
  • 在红帽 JBoss Developer Studio (Devstudio) 中使用 Eclipse Marketplace 客户端

    我想问您是否 以及如何 可以在 Red Hat JBoss Developer Studio 10 3 0 GA 中使用 Eclipse Marketplace 我尝试从 1 安装 EMPC 但版本看起来有点旧 之后无法运行 基本上我想将
  • 从 Eclipse 的历史视图中删除 ORIG_HEAD 和 FETCH_HEAD

    我最近开始使用 Eclipse Kepler 和 EGit 插件 这些分支不是我习惯的 有没有办法永久阻止这些分支的创建 我尝试手动删除它们 但它不起作用 并且我不想在下次获取或变基时保留它们 据我从对您问题的评论中了解到 您只希望这些参考
  • Android Studio图形界面中的ViewFlipper切换?

    感谢您抽出时间并在有时间的情况下回答我的问题 我对 Android 编程相当陌生 所以任何帮助都很棒 我正在使用 Android Studio 并且编写了一个包含多个布局的 XML 布局 我可以在使用 ViewFlipper showNex
  • 如何在 Eclipse 中获得完全限定的类名?

    有没有一种快速方法可以在 Eclipse 中单击 Java 类并获取其完全限定名称 或将其复制到剪贴板 2016年6月29日编辑 正如 Jeff 所指出的 您只需要执行以下第二步 1 Double click on the class na
  • 是否有 Ubuntu 10.04 存储库可以下载最新版本的 Eclipse?

    我还没有找到一个可以安装 Eclipse 4 2 Juno 的软件 默认的 Ubuntu 存储库 我使用的是 Ubuntu 10 04 建议我使用古老的 Galileo 版本 我在 Launchpad 上找到了 Eclipse 的页面 该页
  • 需要 Java 源文件的依赖树

    我需要从大型遗留 Java 代码库中提取一些特定功能 以便将其转换为独立的命令行应用程序 这段代码根本没有文档记录 并且不是很模块化 甚至不是很清晰 所以我很难弄清楚我需要保留什么 基本上我需要的是一棵依赖关系树 列出了这个 java 文件
  • android/eclipse 中的网络服务

    我需要通过soap 方法使用android eclipse 的Web 服务 即 我必须提供输入并根据用户输入从网络服务显示适当的结果 如何做到这一点 java类 public class Demo webserviceActivity ex
  • 如何在Eclipse中制作war文件[重复]

    这个问题在这里已经有答案了 制作war文件的简单方法是什么 当我右键单击 在服务器上运行 时 我的项目正在运行 但我想部署在 tomcat 服务器上 我已经安装了m2clipse但这给了我一个错误 maven是否必须制作war文件 我需要特
  • Eclipse:对 Java 1.7 的失望(未绑定库)

    我在全新安装的 Eclipse 中处理全新项目时遇到问题 重现步骤 下载此版本的 Eclipse http www eclipse org downloads packages eclipse ide java developers hel
  • Eclipse:如何增加查找/替换历史记录?

    查找 替换对话框显示最后 8 个条目 该对话框通过 Ctrl F 显示 我想增加 查找 和 替换为 输入字段的历史记录中显示的条目数 我必须搜索并替换几个字符串和正则表达式 因此我一次又一次地输入字符串和正则表达式 我并不是指文件内容更改的

随机推荐

  • Docker Compose 和 Kubernetes 有什么区别?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 在深入研究 Docker Google Cloud 和 Kubernetes 时 如果还
  • logd 快捷方式在 Intellij 和 Kotlin 中不起作用

    使用 logt logd loge 等快捷方式在 Intellij 中记录 Java 非常简单 但我搬到了 Kotlin 我注意到这些快捷方式不再起作用了 我不知道这是否与我的配置有关 如果不是 我该如何解决这个问题 您应该创建单独的模板以
  • 让应用程序布局与 Bootstrap 4 页面配合使用

    我使用的是 Domino 9 0 1 并成功安装了 Bootstrap Library 1 0 0 201403171254 在应用程序配置 Xsp 属性 常规下 我将主题设置为 bootstrapv3 1 1 并在应用程序配置 Xsp 属
  • 页面刷新后保留值

    我在 C 中使用按钮控件 验证按钮 我在我的项目中定义了一些全局变量 当我单击该按钮时 会发生一些表单验证 并且另一个按钮 保存按钮 可见 问题是当我单击验证按钮时 当前页面刷新并且全局变量不包含值 它显示为空 即使在页面刷新后 我如何维护
  • 序列化性能和 Google Android

    我正在寻找加快序列化性能的建议 特别是在使用 Google Android 时 对于我正在从事的一个项目 我试图将数百个对象从服务器中继到 Android 应用程序 并经历各个阶段以获得我需要的性能 首先 我尝试了一个糟糕的 XML 解析器
  • 用于注册和忘记密码的不同电子邮件验证消息

    使用 AWS 的 Cognito 可以获得很多好处 因为大多数功能 如果不是全部 已经由 AWS 实现 但我遇到了一种情况 我不确定如何使用 Cognito 来实现 考虑以下两种情况 Sign up 用户通过提供电子邮件和密码进行注册 将向
  • 哪些字符可以作为使用 Esprima 的 JavaScript 中的运算符?

    From 以前的 https stackoverflow com q 20762338 1420197问题 我学会了如何扩展 JavaScript 语言以支持更多运算符 由我创建 There Benjamin 使用 Esprima 并创建了
  • 我应该使用 std::begin 与数组吗?

    作为一个简单的例子 看一下这段代码 或者想象一下特定于数组的代码而不是模板和其他通用编码技术 int a 1 2 3 7 8 9 55 vector
  • 如何使用 $location 服务对 angularjs 控制器进行单元测试

    我正在尝试创建一个简单的单元测试来测试我的显示功能 我收到以下错误 TypeError Object has no method show 这好像是 rootScope不是控制器的范围吗 这是我的控制器 function Opponents
  • 减慢线程速度的最佳方法?使用 Sleep() 可以吗?

    我编写了一个 C 库 它执行一些非常繁重的 CPU 工作 所有数学和计算 如果留给它自己的设备 将很容易消耗 100 的所有可用 CPU 资源 它也是多线程的 以达到可用逻辑的数量 机器上的核心 因此 我在使用该库的软件应该调用的主计算循环
  • 按值返回副本而不是移动

    为什么这个程序调用复制构造函数而不是移动构造函数 class Qwe public int x 0 Qwe int x x x Qwe const Qwe q cout lt lt copy ctor n Qwe Qwe q cout lt
  • Joi 验证器只有键之一

    我正在开发一个 api 它应该允许多个参数 但对于其中三个参数 我只想允许其中一个 每个键的值更容易 但我想知道 Joi 是否也允许它 或者我应该在我的服务器中添加额外的验证逻辑 简而言之 对于钥匙a b or c我想让任何具有以上三个以上
  • 使用视频作为 div 的背景

    我想在 CSS3 中使用视频作为背景 我知道没有背景视频属性 但是是否可以执行此行为 使用全尺寸视频标签不会给出想要的结果 因为需要在视频上显示内容 它必须是非 JS 如果不可能 那么我需要在服务器端进行更改 并给出视频的屏幕截图 我需要视
  • 调用未定义函数 str_limit()

    调用未定义函数 str limit laravel 6x 这是我的代码 帮帮我 dt Description dt dd str limit product 500 dd 在版本 5 8 中 str 助手已被删除 您必须使用照亮 支持 St
  • 如何使用 yii2 -bootstrap 扩展将模态添加到 yii2 中的导航栏?

    我正在尝试将模态放在我的 yii2 项目的导航栏中 我正在使用 yii2 bootstrap 扩展 我的导航代码 NavBar begin brandLabel gt My Company brandUrl gt Yii app gt ho
  • Android Studio 不断拒绝解析 com.android.support:appcompat-v7:29.0.1

    我已经提到过this http ttps stackoverflow com questions 52997370 线程 但它不能解决我的问题 我不断收到错误 ERROR Failed to resolve com android supp
  • 如何从 Jenkins 2.0 管道脚本读取属性文件

    我正在尝试编写一个管道脚本与 Jenkins 2 0 一起使用来复制我们现有的构建 这个原始构建使用 envInject 插件来读取 Java 属性文件 但我看不到如何从管道 Groovy 脚本中执行此操作 我用 Google 搜索并找到了
  • 标签和类替换标题 (

    ,

    ...) 标签

    我希望将标签从所见即所得编辑器替换为 目前我正在使用以下代码来实现此目的 content preg replace

  • jQuery的load函数在本地不起作用

    当窗口宽度小于 600px 时 我必须在现有 div 中加载 HTML 文件 代码是 div div 我已经在我的网站上测试了这段代码并且它可以工作 但也许我做错了什么才能使其在本地工作 有没有理由load函数不能在本地运行
  • 在 Eclipse RCP 应用程序中在哪里存储“全局”数据?

    我是 Eclipse RCP 的初学者 我正在尝试为自己构建一个应用程序来尝试一下 我对如何实际处理模型对象感到困惑 我能找到的例子都不能解决我遇到的问题 所以我怀疑我的处理方式是错误的 假设我需要使用保存经过身份验证的用户信息的类来初始化