2009-08-13 6 views
2

私が取り組んでいるプロジェクトには、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" 

そのような単純なものです。

私はその意志のメカニズムを理解しようとしている:

  1. は、各システム(C#、Java(登録商標)のネイティブ言語でアルゴリズムを実行することができたら、私はアルゴリズムを書いてみましょう、とXSL)
  2. アルゴリズムが更新されたときに、各システム(C#、Java、およびXSL)で常にアルゴリズムの最新バージョンが使用されます。

だから私の例について詳しく説明するために、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

答えて

4

まあ、これに対する「答えは」DSL、またはあなたがしてレンダリングするだけでいくつかの一般的なマークアップ(面白いことに、あなたはXSLTでこれを行うことができます)です。

しかし、一般的には、これを実装するIMHOは、アルゴリズムの複雑さと書き込む数によっては問題にはなりません。

+0

+1あなたはXSLTでそれを実装することができます。 – Matt

+0

私が望んだ解決策ではありませんが、これはこれまでのところ最高の答えです – Mike

0

これは、ソースコードを生成しませんが、それは非常に少ないコーディングで、様々な言語でロジックを使用することができます

は、このような単純なXML書く:

... 
<case> 
    <InputParam1>1</InputParam> 
    <InputParam2>NULL</InputParam> 
    <answer>one</answer> 
</case> 
... 

そして、それを解析し、 Dictionary/map/what-the-language-or-framework-has-for-hashtablesに格納します。だから、入力パラメタをキー(おそらく、sturctとして)として保存すれば、非常に素早く答えを得ることができます。パラメータitselvesが(「連結部」にあなたの例のように)、戻り値に使用されている場合のために、私はあることを言及する価値がある

... 
<answer>five$inputparam1$</answer> 
... 

のようなデータのためにいくつかの特別な構文を使用したいですあなたが持っているより特殊なケースは、この連結のように、この解決法があまり役に立たない可能性があります。

1

この問題をもう少し一般的に見ると、アルゴリズムの正式版(つまり「自分自身を繰り返さない」という原則)を1つだけ持つことが目的です。

異なるプログラミング言語に自動的に翻訳/エクスポートするのではなく、アルゴリズムを実装するために1つの言語(おそらくXSL)を選択するのが簡単な解決策です。次に、C#とJavaでは、いくつかのXSLツールを使用してアルゴリズムを直接実行し、好きなパラメータを渡します。私はこれまでこれをしていませんが、適切なサードパーティ製のツールを使用することは可能です(XSL内でJavaまたはC#を実行すると、XSLを使用することはできません「ベース」言語の場合)。

+0

はい、DRYはまさにポイントです。そして、はい、C#はXSLを実行できます(これは私が今やっていることです)が、それはネイティブのC#アルゴリズムよりはるかに遅いです。 – Mike

+0

どのようにC#からそれを実行していますか?それはあらかじめコンパイルされていますか?そうでない場合は、.NET用のXSLTコンパイラ(http://msdn.microsoft.com/en-us/library/bb399405.aspx)とJava(http://xml.apache.org/xalan-j)のリンクを参照してください。 /xsltc_usage.html)。 –

+0

(C#3.0の式のような)あらかじめ何かが理想的ですが、私はどんなものにでもオープンしています。 – Mike

関連する問題