【问题标题】:Java; Runtime Interpretation; Strategies To Add Plugins爪哇;运行时解释;添加插件的策略
【发布时间】:2010-11-22 19:55:51
【问题描述】:

我开始着手我的第一个大型项目。这将是一个与Rosetta Stone 非常相似的程序。它将是一个用于学习外语的程序,使用 Swing 用 Ja​​va 编写。在我的程序中,我计划让用户能够选择下载的课程来学习。因为我的母语是英语,所以我将能够创建一门英语课程。但是,我希望说其他语言的人也能够编写课程供用户使用(这是我的程序运行的重要部分)。

由于我希望用户能够下载他们想要的语言课程,因此将其硬编码到程序中是不可能的。课程需要在运行时进行解释。此外,由于我希望其他人与我的工作合作(即制作课程),我需要让他们轻松地这样做。

最好的方法是什么?

我想出的想法是有一个严格的空课程大纲(硬编码)和一个简单的 xml 文件,详细说明要使用的文本和声音。这样做的缺点是它极大地限制了作者。不同的语言可能需要从学习不同的部分开始。

对于手头的问题以及整个项目的任何建议,我们将不胜感激。任何相关资源或信息的链接也将不胜感激。

想想你的时间和精力,

约瑟夫池塘

【问题讨论】:

  • +1 有趣的话题。您能否尝试使问题/问题更明显? .. .是关于..添加...插件的策略吗?..你能强调一下编程问题吗?

标签: java interpreter extensible


【解决方案1】:

如果我这样做,我会认真考虑使用 Eclipse EMF 来为定义课程的“语言”建模。 EMF 一开始是相当令人生畏的,但它给了你:

  • 可以通过多种方式输入/编辑的高级模型。
  • 一种将“实例”(即课程)序列化为 XML 的自动机制。 (如果您愿意,您可以修改序列化。)
  • 为您的实例的内存表示自动生成 Java 类。这些提供了针对您的模型进行调整的 API,一种与 Java 反射等效的 EMF 通用 API……但基于 EMF 模型类而不是 Java 类。
  • 为您的“实例”自动生成的树形编辑器。
  • 用于实现您自己的约束/验证规则的挂钩,以说明什么是有效的“课程”。

相关的 Eclipse 插件提供:

  • 通过生成解析器/反解析器映射到基于文本的语言
  • 到图形语言的映射;例如使用框/箭头/等的符号
  • 各种更高级的持久性机制
  • 比较/差异、模型到模型的转换、OCL 中的约束等

我曾在几个大型项目中使用过 EMF,而让我继续关注的主要观点是模型演化的简易性……与在较低抽象级别构建所有内容相比。如果我的模型(语言)需要扩展/更改,我可以使用 EMF 模型编辑器进行必要的更改,重新生成代码,扩展我的自定义代码以使用扩展做正确的事情,我已经完成了(存储实例的模转换)。

【讨论】:

    【解决方案2】:

    如果你打算从头开始做这件事(Will 的想法不错),我要做的是首先制定最容易创建语言课程的文件格式。它可以是 XML、纯文本或你自己想出的其他格式。

    您可能需要语言格式具有一定的灵活性,因为您实际上希望能够指定问题和答案等内容。由于所有额外的终止符,XML 很痛苦,但它提供了大量的元数据。如果你喜欢 XML,你可以考虑在 YML 中定义你的语言文件,它为你提供 XML 的数据,但使用空格分隔符而不是尖括号。

    您可能还想以创建文件的语言定义文件,因此您可能需要也可能不需要英文单词作为键。如果您不想要任何英语,您可能必须跳过 XML 和 YML,并提出自己的文件格式——可能是布局和/或特殊符号定义流程和“功能”的地方。

    一旦你定义了文件格式,你就不必担心硬编码任何东西......你将无法做到,因为它已经在文件中了。

    插件功能也很好...这是您的定义文件还包含信息的地方,这些信息告诉您要实例化(反射性地)哪个类并用于解析/显示数据。这样,您只需提供新的 jar 文件即可添加新类型的问题。

    如果这令人困惑,抱歉,这在单向论坛中很困难,因为我无法看着你的脸来判断你是否在关注我,或者我是否朝着正确的方向前进。如果您认为我走在正确的轨道上并且想要更多详细信息(我以前做过一些此类事情),请随时在评论中留下后续问题(或电子邮件地址),我会很高兴与您进一步讨论。

    【讨论】:

    • 我想尝试制作自己的文件格式,因为我确实希望这更像是一种学习体验。如果您愿意再深入一点,我将不胜感激。我的电子邮件是 Joseph dot M dot Pond (gmail)
    【解决方案3】:

    简单地说,您的程序应该基于 Eclipse RCP 或 Netbeans 平台等系统。这两个系统都已经准确地处理了这个问题,并且都非常适合这项任务。它们不仅适用于 IDE。

    这是更大的第一步,因为您需要学习其中一个平台,而不仅仅是 Swing。

    但是,他们解决了问题,而且他们的整体组织和技术无论如何都会很好地为您的程序服务。

    不要重新发明这个轮子,只需学习其中之一即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多