首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个可扩展、跨平台兼容的程序“核心”

创建一个可扩展、跨平台兼容的程序“核心”
EN

Software Engineering用户
提问于 2011-02-21 13:02:05
回答 6查看 2.4K关注 0票数 3

从根本上讲,简略是相对简单的。我们需要创建一个程序核心。一种引擎,它将为具有大量不同的潜在应用程序和部署的各种程序提供动力。

核心将是一个分析和算法处理器,它基本上将采取用户特定的输入和输出场景的基础上,它得到的信息,同时记录这些信息的报告。

它需要跨平台兼容。一些东西,可以有特定的平台层放在顶部,可以与核心接口。

它还需要能够扩展,例如,模块化,开发人员能够编写“附加”或“扩展”,这可以改变最终程序的功能,并能充分使用核心。

(例如,我想要创建的一个很好的例子是浏览器。它有它的主要核心,例如,web引擎,然后在上面有一个特定于平台的GUI,也可以有插件和扩展来改变程序的行为。)

我们的问题是,扩展需要直接与主核接口,并扩展/更改该功能,而不是平台特定的“层”。

因此,考虑到我在这方面没有任何经验(我有PHP背景和最近的目标-c),我应该从哪里开始,请您向我传授任何知识/智慧吗?

谢谢你能给我的帮助和建议。)如果你需要更多的解释,就问吧。目前它还处于开发的早期阶段,所以我们只是在研究所有可能的发展路线。

非常感谢

EN

回答 6

Software Engineering用户

回答已采纳

发布于 2011-02-21 14:40:29

你说的是建立一个相当有能力的框架。在10,000英尺的视野里,这个概念很简单,但是当你接近实现它的时候,你会发现它充满了困难。有几种不同的技术被设计成允许跨平台/编程语言支持。以下是一对夫妇的名单:

  1. 自定义语言绑定--使您获得最快的速度,像SWIG这样的库可以在几种低级语言和高级语言之间进行转换。问题是,当您试图解决编译器特定的名称损坏问题和其他严重问题(例如将非垃圾收集语言与垃圾收集语言连接起来)时,它会变得相当复杂。
  2. CORBA --让所有搅乱CORBA的人从诅咒开始。CORBA的概念是使用接口定义语言(IDL)生成客户机/服务器绑定。CORBA平台将消息编码为字符串,并通过CORBA引擎将消息从客户端发送到服务器端和服务器端。CORBA的优点是您可以将客户端和服务器(用户和实现)拆分到不同的机器上。缺点是其他的一切--和性能。
  3. Web -它是CORBA相同基本概念的扩展,但工作量要小得多。本质上,您有一个请求/响应结构,以及两种主要的交互风格。基于SOAP的web服务与CORBA几乎完全一样,除非您在传输时使用XML。除了发送回JSON或XML (取决于请求)之外,REST风格的web服务几乎完全类似于为web页面提供服务。当然,这给了您最少的性能,尽管您获得了一个相当可预测的生命周期(与CORBA不同)。

您正在处理的另一个主要复杂性是可扩展UI的概念。基本上,您的框架需要能够根据请求和算法的属性动态地映射UI特性。我对你的问题领域还不太了解,无法准确地建议如何解决这个问题。如果我这么做了,我会为这项工作收费(我不便宜)。通常,您希望从算法本身、输入和向框架提供的查询类型中查看您需要的提示。您的UI组件还需要提供提示,说明它们可以绑定到什么,以及可以可视化的对象类型。在这里,您可以起草一些规则,说明如何将UI绑定与算法中的数据匹配。

这至少会让你朝着正确的方向思考。请不要忘记安全、拒绝服务保护和其他大多数人忘记的问题。

票数 3
EN

Software Engineering用户

发布于 2011-03-01 19:05:19

我相信你的问题的实际技术方面已经被广泛讨论了。但是,我想提出一个更基本的问题。预先警告:可能是我误解了你,我的贡献完全是胡说八道:)

<cynism>

我们需要创建一个程序核心。一种引擎,它将为具有大量不同的潜在应用程序和部署的各种程序提供动力。核心将是一个分析和算法处理器,它基本上将采取用户特定的输入和输出场景的基础上,它得到的信息,同时记录这些信息的报告。

恭喜你,你刚刚发明了java虚拟机。

它需要跨平台兼容。一些东西,可以有特定的平台层放在顶部,可以与核心接口。它还需要能够扩展,例如,模块化,开发人员能够编写“附加”或“扩展”,这可以改变最终程序的功能,并能充分使用核心。

9~10成熟。你发明了编程语言的概念。但你迟到了几十年。

</cynism>

更严重的是,听起来你在试图发明一些非常通用的东西,它可以解决几乎所有的问题。它让我想起了企业规则引擎,但与之不一样。

您可能会花很长时间开发这个“核心”,然后发现您已经创建了非常通用的软件。然而,在现实生活中,我们几乎没有一般性的问题。我们有一组特定的属性,其中一些共享属性。您很可能最终会有一个非常通用的核心,这不适合您的许多具体问题。基本上,你做错了,会浪费很多时间。同时,您没有工作的软件。另外,不要忘记,特定问题的需求在同一时间内会发生变化:需求从来没有固定过。

我建议换个角度看。写出你想要运行在这个核心之上的第一个“东西”。立竿见影的胜利:工作软件非常快。然后写下一件事。甚至可能是另一个。只有在这一点上,才能看到您的代码有哪些共同点。把这些部分提取到一些通用的东西上--不是对世界上所有的问题都是通用的,而只是你现在要解决的两三个问题。这意味着你有快速工作的软件,并且有一个核心来完成它所需要做的事情--不多,也不少。只要您编写代码是合理的模块化的,而不是像大泥球那样,并且有一些不错的测试,这应该不会很困难。

细微的差别,有时只是很明显的通用部分。马上就去买这些。但是花点时间停下来,想想你是否确信这些都是通用部件。如果有疑问,请暂时不要让它成为通用的:雅格尼。你可以随时重构。

票数 5
EN

Software Engineering用户

发布于 2011-02-21 14:24:54

我想说,如果您想要跨平台的ish,那么最好从Java开始。从您的问题中还不清楚,您是在创建基于web的、可以从不同平台访问的东西,还是用户可以在不同的平台上安装的东西。在后一种情况下,Java或在许多不同类型的平台上可用的脚本语言是最好的选择。

考虑到你有一个模糊的简要说明,它听起来实际上像是在尝试创建一种虚拟机,因此考虑到Java类的工作已经跨平台(一般来说,它确实在跨平台的基础上工作,但通常是在细节方面),这似乎是一个合理的起点。

在我看来,您在这里讨论的是创建特定于域的语言。假设您清楚DSL设计的细节(和一般的语言设计),并且您有一个绝对详细和明确的规范,这应该是一个有趣且相当可实现的项目。不一定是简单的语言,尤其是如果您希望使与许多不同语言的界面变得容易的话。如果你在这里没有现有的专业知识,你可能会想找一个这样做的人,并说服他们加入团队。你所描述的听起来是一个相当大的努力,所以应该有足够的预算。

您的问题没有明确说明您是否有明确、详细和明确的规范,但这是一个相当模糊的问题--如果您没有比您正在提出的问题更清楚的简短,那么您需要在进一步研究之前解决这个问题。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/50119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档