2011-01-18 4 views
2

DBオブジェクトからDALをビルドするために、PLINQOテンプレートにCodeSmithを使用します。それは素晴らしい作品です!CodeSmithのようなコードジェネレーターを使用してどのようなコードを検討しますか?

私はこれがコードジェネレータの主な用途だと思っていますが、私は興味があります。コードジェネレータを使用する他のコードについて教えてください。頻繁に使用するCodeSmithテンプレートをお持ちですか?もしそうなら、それは何ですか?

答えて

3

私はCodeSmithを使用していませんが、私はかなりのコード生成を行っています。私は、CMコードが3つの異なるプラットフォーム用に生成されたWiMAXシステム用の構成管理(CM)システムのほとんどを書いていました。唯一の違いは、各プラットフォームのCMモデルです。

このモデルは、私たちが作成した独自のドメイン固有言語(DSL)にパーサーが含まれていました。言語は、コンテナがネストして識別子を持つ基本的なコンテナ/エレメントスタイルであり、要素は事前定義されたタイプであった。ドキュメントは要素とコンテナの属性でした。要素とコンテナ定義にLuaスニペットを追加してセマンティック検証を行うことができます(たとえば、IPアドレスが他の場所で定義されたCIDR範囲にある場合など、値は正しい範囲にあります)。

パーサーは、テンプレートでプッシュした構文ツリーを生成しました。テンプレート言語は部分的なC実装のStringTemplateでした。 、モデルを検証し、便利なエラーメッセージを提供するための収集Luaのコード

  • アプリケーションが設定値を取得するために呼び出すことができモデル固有のC API、
  • 二つの「バックエンド:私たちは、生成するためにそれを使用しました「(モデルの一時的な操作のための)メモリ内の値を管理するでしょうAPIについて、および(プロセス間での共有のための)データベースシステムでは、
  • 設定ファイルパーサーとライター、
  • HTMLドキュメント、および
  • 構成の対話式表示および変更のためのコマンドラインインターフェイス(CLI)実装。

振り返ってみると、私は単純にLuaをDSLとして直接使用していたはずです。もっと冗長になっていましたが、既にパーサを持っていて、私に利用可能なLuaテンプレートの選択肢がたくさんあると、多くの開発努力が節約されました。

繰り返し構造を持ち、それらのことが何をする必要があるかについてよく定義されたルールの場合、コード生成は素晴らしいことです。

関連する問題