我想用多种语言创建一组域对象,这样我就可以定位不同的平台。我一直在寻找外部DSL作为为我的域定义语言的方法,然后可能编写适应器,为我感兴趣的语言生成代码。这是解决这个问题的最佳方法吗?或者维护项目的多个版本更简单?
答案 0 :(得分:2)
我认为Apache Thrift可以满足您的要求。
答案 1 :(得分:1)
对于迟到的回答感到抱歉,但是当你提到C#是你的主要语言时,这个几乎完全支持的基于Visual Studio的技术正是你所寻找的。 p>
您必须了解您想要使用DSL进行抽象的内容,但多平台支持在此基础上是微不足道的。
免责声明:这是我们的技术,但它是公开的,它解决了问题中提出的问题。
http://abstraction.codeplex.com/
请注意!请注意当前下载的“alpha”阶段,我建议您跳过压缩下载并获取最新信息源。我在不久的将来更新更好的构造。查看“Production / Dev / AbstractionTemplate”解决方案中的“Context”实现。
答案 2 :(得分:0)
如果不了解您计划使用DSL的目的,很难提供帮助。
便携性是您的主要问题吗? 为了成功地针对这些不同的平台,您可能必须维护特定于plaftorm的层(生成与否)。
如果您计划在DSL中编写整个应用程序,那么使用您自己的编译器将其转换为每个平台的可运行代码,这很可能是一个糟糕的主意,过于复杂和过度设计。
但是,如果你有一个明确定义的平台无关逻辑块,那么DSL就是一个不错的选择。只需在每个目标平台上为它编写一个解释器(假设性能不重要,这比生成代码更简单,更容易)。
答案 3 :(得分:0)
创建域的多语言版本的最佳方法是什么?
这是({?}}的想法。从维基百科引用Model Driven Architecture (MDA):
模型驱动架构方法 使用a定义系统功能 平台无关模型(PIM)使用 适当的域特定 语言(DSL)。
然后,给出一个平台定义 模型(PDM)对应CORBA, PIM,Web等,PIM就是 翻译成一个或多个 特定于平台的模型(PSM) 电脑可以运行。这需要 映射和转换 也应该建模。
PSM可能使用不同的域 特定语言(DSL),或 通用语言(GPL)之类的 Java,C#,PHP,Python等一般的自动化工具 执行此翻译。
根据您的域的复杂性和MDA工具的可用性,这可能是一个选项(实施成本较低)。