我正在用C ++开发一种用于印刷电路板和原理图(又名EDA CAD)的计算机辅助设计包。它使用Lua来完成某些特定的事情,但我想扩展Lua的角色,以便它实现了很多用户界面逻辑。
我想以一种让人们通过编辑Lua轻松改变用户界面行为的方式重新构建内部,并添加全新的功能。
问题是,如果没有将某种大规模的API暴露给Lua代码,我想不出一个好方法。我怀疑一个庞大的API,函数调用我能想到的一切可能是一个糟糕的设计。如何设计一个允许用户实现我甚至没想过的东西的系统?
是否有我能阅读的好文件或书籍,或人们谈论此类事情的论坛。我一直在寻找和思考好几个月,我仍然不确定答案是什么。
BTW,该项目名为LiquidPCB。
非常感谢
雨果
答案 0 :(得分:1)
很明显,您需要通过API向lua公开一些函数,以便开发人员可以编写和组合这些功能。
我偶然发现了关于如何正确设计API的好presentation,并且所包含的建议与我过去所做的相符。它将帮助您指导您的设计。
一旦有了API,我建议在lua或C ++中使用command pattern来创建一个包含UI的桥梁。在过去,我已经在命令中封装了每个API调用,然后可以通过脚本调用该命令。我不知道lua,但我知道Python是一个很好的脚本语言,可以用于你的命令。
祝你的项目好运。
答案 1 :(得分:1)
我想指出在新的Blender版本2.50的开发过程中发生了什么。以前的Python API曾经是一个试图包装大多数功能的手写层。 new API将通过Data API自动包装对数据结构的访问。更多文件here。
答案 2 :(得分:0)
尝试SWIG(Simplified Wrapper和Interface Generator)。它可以为现有的C / C ++头文件生成Lua包装器。它将允许您快速将所有API公开给Lua。根据您的经验,您可以决定不同的架构。
答案 3 :(得分:0)
开源项目?
通过它的声音,您的用户将具有一定程度的编程知识,并且他们也将要实现新功能。以这种方式履行两个角色,作为客户和开发人员。
为什么不拥有一个公开的只读源树,他们可以检查,处理并向您提交补丁。如果您认为他们的工作足够好并且足够相关,那么您可以将其包含在下一个版本中。
如果您认为开发人员一般情况良好,您可以直接对源树进行写入访问,并开始使用它们规划新功能。
答案 4 :(得分:0)
新的Sketchup Ruby API是您正在寻找的一个很好的例子。将其与较旧的API进行比较,以获得有关不的内容的一些有趣见解。