3

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

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

这样做的最佳方法是什么?

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

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

想想你的时间和精力,

约瑟夫池塘

4

3 回答 3

5

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

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

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

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

于 2009-08-26T00:06:02.133 回答
1

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

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

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

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

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

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

于 2009-08-26T00:18:05.403 回答
1

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

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

相关的 Eclipse 插件提供:

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

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

于 2009-08-26T01:16:06.403 回答