我正在研究的项目涉及3个不同的系统/平台。 C#,Java和XSLT。我有一些简单的算法(只是一堆条件),用伪代码表示如下:
if inputParameter1 is equal to 1
return "one"
else if inputParameter2 is equal to 5
return "five" concatenated with inputParameter1
else
return "not found"
像这样简单的东西。
我正在试图找出一种机制:
所以详细说明我的例子,C#表示将是:
public string TheMethod(int inputParameter1, int inputParameter2)
{
if (inputParameter1 == 1)
{
return "one";
}
else if (inputParameter2 == 5)
{
return string.Concat("five", inputParameter1.ToString());
}
else
{
return "not found";
}
}
,XSLT表示将是:
<xsl:template name="TheMethod">
<xsl:param name="inputParameter1" />
<xsl:param name="inputParameter2" />
<xsl:choose>
<xsl:when test="$inputParameter1 = 1">
<xsl:text>one</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:choose>
<xsl:when test="$inputParameter2 = 5">
<xsl:text>five</xsl:text>
<xsl:value-of select="$inputParameter1" />
</xsl:when>
<xsl:otherwise>
<xsl:text>Not Found</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
希望你明白了。
我如何以通用方式表达算法并能够自动将其转换为C#,Java或XSL?
谢谢!
-Mike
答案 0 :(得分:4)
嗯,对此的“回答”是DSL,或者只是一些常见的标记,然后你可以渲染(有趣的是,你可以用XSLT做到这一点)。
但一般情况下,恕我直言,实施此操作并不值得,取决于您的算法有多复杂以及您将编写多少这些算法。
答案 1 :(得分:1)
更普遍地看一下这个问题,你的目标是只有一个权威的算法版本(即“不要重复自己”原则)。
更简单的解决方案是选择一种语言(可能是XSL)来实现算法,而不是尝试自动翻译/导出到不同的编程语言。然后在C#和Java中使用一些XSL工具直接执行算法,传入你喜欢的任何参数。我之前没有这样做,但我认为可以使用正确的第三方工具(而我怀疑你可以反过来做,从XSL中执行Java或C#,这就是为什么XSL是最好的选择对于“基础”语言。)
答案 2 :(得分:0)
这不会产生源代码,但它可以在几乎没有编码的情况下以各种语言使用逻辑:
写一个这样的简单xml:
...
<case>
<InputParam1>1</InputParam>
<InputParam2>NULL</InputParam>
<answer>one</answer>
</case>
...
然后解析它,并将其存储在字典/ map / whatever-the-language-or-framework-has-for-hashtables中。因此,将inputparams存储为键(也许作为sturct),您可以非常快速地得到答案。对于在返回值中使用参数本身的情况(如“concat part”中的示例),我会对数据使用一些特殊语法,如
...
<answer>five$inputparam1$</answer>
...
值得一提的是,您遇到的特殊情况越多,这种解决方案就越有用。