CodeSmithのようなコードジェネレーターを使用するコードはどのコードを検討しますか?
-
12-10-2019 - |
質問
PlinqoテンプレートにはCodesmithを使用して、DBオブジェクトからDALを構築します。うまく機能します!
それがコードジェネレーターアプリの主要な使用だと思いますが、私は興味があります...他にコードジェネレーターを使用することを検討しますか?頻繁に使用するコードスミステンプレートはありますか(もしそうなら、それは何をしますか)?
解決
私はコードスミスを使用していませんが、かなりのコード生成を行いました。 WIMAXシステム用の構成管理(CM)システムのほとんどを書きました。ここでは、3つの異なるプラットフォーム用にCMコードが生成されました。唯一の違いは、各プラットフォームのCMモデルでした。
このモデルは、私たちが構築したカスタムドメイン固有言語(DSL)で、パーサーを持っていました。言語は、コンテナがネストして識別子を持つことができる基本的なコンテナ/要素スタイルであり、要素は事前に定義されたタイプでした。ドキュメントは、要素とコンテナの属性でした。追加できます ルア セマンティック検証を行うための要素とコンテナの定義へのスニペット(たとえば、それが他の場所で定義されているCIDR範囲などのIPアドレスである場合、値は正しい範囲にあります)。
パーサーは構文ツリーを生成し、テンプレートでプッシュしました。テンプレート言語は、部分的なC実装でした stringtemplate. 。私たちはそれを使用して生成します:
- アプリケーションが設定値を取得するために呼び出すことができるモデル固有のC API、
- モデルを検証し、有用なエラーメッセージを提供するための収集されたLUAコード、
- メモリ(モデルの一時的な操作用)とデータベースシステム(プロセス間で共有)で値を管理するAPIの2つの「バックエンド」、
- 構成ファイルパーサーとライター、
- HTMLドキュメント、および
- インタラクティブな表示と構成の変更のためのコマンドラインインターフェイス(CLI)の実装。
振り返ってみると、LUAをDSLとして直接使用するだけでよいです。それはもっと冗長だっただろうが、パーサーがすでにそこにあり、私が利用できる多くのLUAテンプレートの選択肢を持っていることは、多くの開発努力を節約するだろう。
繰り返し構造と、それらのことが何をする必要があるかについて明確に定義されたルールを持っているものにとって、コード生成は素晴らしいことです。