Architecture 独立模块中的项目功能、架构决策

Architecture 独立模块中的项目功能、架构决策,architecture,Architecture,情况如下: 我们(学生)必须为我们的大学编写跨平台软件项目,设计用于处理统计数据,可能是天文数据。预计学生(具有不同技能)将能够年复一年地继续维护/改进项目 其主要思想是将程序划分为主要部分和多个不同的模块,这些模块可以独立编写和连接,可能作为共享库。这些模块将分别包含分析和处理特定数据的方法,并给出输出(数字、字符串、图像等) 所以我们有一小群相对熟练的学生,他们可以做主要的工作。选择C++作为主要的编程语言,并选择跨平台GUI的Qt。p> 主要的问题是关于那些未来将开发模块的人。这里的教育是

情况如下:

我们(学生)必须为我们的大学编写跨平台软件项目,设计用于处理统计数据,可能是天文数据。预计学生(具有不同技能)将能够年复一年地继续维护/改进项目

其主要思想是将程序划分为主要部分和多个不同的模块,这些模块可以独立编写和连接,可能作为共享库。这些模块将分别包含分析和处理特定数据的方法,并给出输出(数字、字符串、图像等)

所以我们有一小群相对熟练的学生,他们可以做主要的工作。选择C++作为主要的编程语言,并选择跨平台GUI的Qt。p> 主要的问题是关于那些未来将开发模块的人。这里的教育是基于PASCAL/Delphi(乌克兰,都说:)),C++课程很差,绝大多数学生懒得学习一些东西,所以假设Pascal是他们唯一知道的东西。 主要问题来了:

设计具有以下要求的模块系统的适当方法是什么:

  • 项目必须是跨平台的
  • 数据处理的主要功能必须作为一组(相对)独立的模块来实现
  • 模块应使用不同的语言编写(必须使用Pascal)
  • 模块应该能够通过创建一个窗口来请求额外的数据,或者以某种方式触发主窗体中的窗口生成机制并获取新数据,或者以某种更好的方式
  • COM技术不能被使用
  • 未来编写新模块的学生的平均技能可能较低

任何想法都会被采纳。

我将从为数据提供商和数据消费者设计合同开始。由于技术限制,契约应该表示为函数,并作为本机库实现

然后,您的核心模块应该接受任何实现数据提供者和数据使用者契约的插件。插件架构应该很容易实现,您只需扫描一个文件夹,看看是否有任何具有预期签名功能的共享库(您的合同)。如果是,插件也会自我介绍,这样它就可以连接到主菜单

拥有数据提供者和数据使用者,您几乎可以永远设计新功能。新的数据提供者可以使用文件、web服务或任何东西来创建数据。新消费者可以分析数据、导出、创建图表或任何你想要的东西


我关心的是Delphi的需求和跨平台开发的需求。我的建议是忘记Delphi,转而使用Java。它是跨平台的,有很好的免费开发工具,在2年、5年或10年内,它更有可能被项目成员认可。

我将从为数据提供商和数据消费者设计合同开始。由于技术限制,契约应该表示为函数,并作为本机库实现

然后,您的核心模块应该接受任何实现数据提供者和数据使用者契约的插件。插件架构应该很容易实现,您只需扫描一个文件夹,看看是否有任何具有预期签名功能的共享库(您的合同)。如果是,插件也会自我介绍,这样它就可以连接到主菜单

拥有数据提供者和数据使用者,您几乎可以永远设计新功能。新的数据提供者可以使用文件、web服务或任何东西来创建数据。新消费者可以分析数据、导出、创建图表或任何你想要的东西


我关心的是Delphi的需求和跨平台开发的需求。我的建议是忘记Delphi,转而使用Java。它是跨平台的,有很好的免费开发工具,在2年、5年或10年内,它更有可能被项目成员认可。

基于Wiktor Zychla的回答,如果您选择使用Java和基于组件的体系结构,我建议您使用OSGI(我可能不会给出我的选择意见,因为我不太客观,因为我只使用java)。 有了OSGI,数据提供者和数据使用者的合同定义得到了完美的管理,系统将根据他们定义的合同自动将模块插入到一起。用于部署的扫描文件夹已经在这里,它支持热部署、同一组件的多个版本一起运行等


根据功能要求,也建议使用为复杂数学运算提供丰富库的语言,但我不知道pascal的功能。

根据Wiktor Zychla的回答,如果您选择使用Java和基于组件的体系结构,我建议使用OSGI(我可能不会给出我的选择意见,因为我不太客观,因为我只使用java)。 有了OSGI,数据提供者和数据使用者的合同定义得到了完美的管理,系统将根据他们定义的合同自动将模块插入到一起。用于部署的扫描文件夹已经在这里,它支持热部署、同一组件的多个版本一起运行等

根据函数要求,也建议使用为复杂数学运算提供丰富库的语言,但我不知道pascal的功能