2009-07-16 8 views
2

私は状態とコマンドのパターンを利用するアプリケーションを書くつもりです。州は命令のファサードとして行動する。コードジェネレータを書くためのベストプラクティス

すべての状態が実行できるわけではない7つの状態と約50のコマンドがあります。コマンドを実行できないメソッドはすべて実行をスローします。そうでなければ、コマンドを作成して実行し、結果を返します。

似たようなクラスがたくさんあるので、コードを自動生成するためのコードを書くことを考えています。私はExcelでマップされたマトリックスを持っています。どのステートでどのコマンドを実行できるのか、そしてそれをCSVに出力して、コード生成の基礎として使用することを計画していました。

私の考えは、さまざまなクラスが実装するインターフェイスを手作業で記述し、それをコードジェネレータのテンプレートとして使用することです。

これは良い考えですか?誰かがこれを行う最善の方法についてのヒントを持っていますか?

私はJavaでコードを作成しますが、基本原則はあらゆるOO言語のコード生成に適用されると思います。

+0

あなたのケースで[ragel](http://www.complang.org/ragel/)のヘルプがありますか? – jfs

答えて

2

クラスが本当に似ているのであれば、コード生成を使用するのではなく、共通のCommandオブジェクトからクラスを派生させてみましょう。

あなたが話していることは、基本的なルールエンジンのようです。作成しているルールエンジンは、基本的に各コマンドを実行するものです。

+0

私のデザインには、抽象的なコマンドクラスのための余地がありますが、私はまだ50クラスをコード化してコード生成を行う必要があります。 –

+0

あなたは50のクラスを作り、50のテンプレートをコンパイルしたり、記入したりすることができますか?あなたはコードジェネレータを記述する必要がある場合を除いて、ほぼ同じ量の作業のようです!私は、あなたのクラスのほとんどが似ている場合、派生クラスのクラス定義は本当に、本当に簡単でなければなりません... –

+0

私は、コードジェネレータを使用して、単一のテンプレートを使用してスケルトンを書くという面倒な作業を行うことを計画していました。そしてバルーンを埋める。しかし、私はあなたのポイントを見ます。 –

0

このようにExcelマクロを使用して(C言語で)FSMコードを生成すると、本当にうまく動作します。私が提案することの1つは、他のユーザーが好みのスタイルに合わせてテンプレートを変更できるように、生成されたコードを可能な限り多く使用することです。

0

私は現在、同様のシナリオでコード生成を頻繁に使用するプロジェクトに取り組んでいます。生成されたコードを使用してしばらくしてから、ジェネリックがロットコードの多くを提供するために使用される場合、ジェネリック型(繰り返しビットとなるものを保持する)と独立した関数型をより多く使用するソリューション特定のロジックを保持し、実際に維持するコードの量を減らすだろう。

Javaでは、関数ポインタを書くための構文は、他の言語(クラスが実装する別のインタフェース)よりも厄介ですが、テンプレートを作成するのに十分な問題を分析する頃には、プリエンプティブなリファクタリングが必要でした。

関連する問題