2

PLINQO テンプレートに CodeSmith を使用して、DB オブジェクトから DAL を構築します。それはうまくいきます!

それがコード ジェネレーター アプリの主な用途だと思いますが、興味があります... コード ジェネレーターの使用を検討する他のコードは何ですか? 頻繁に使用する CodeSmith テンプレートはありますか (ある場合、それは何をしますか)?

4

1 に答える 1

3

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

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

パーサーは構文ツリーを生成し、それをテンプレートにプッシュしました。テンプレート言語はStringTemplateの部分的な C 実装でした。これを使用して以下を生成しました。

  • アプリケーションが構成値を取得するために呼び出すことができるモデル固有の C API。
  • モデルを検証し、有用なエラー メッセージを提供するために収集された Lua コード、
  • メモリ内の値を管理する API (モデルの一時的な操作用) とデータベース システム内の値 (プロセス間で共有するため) の 2 つの「バックエンド」
  • 構成ファイルのパーサーおよびライター、
  • HTML ドキュメント、および
  • 構成を対話的に表示および変更するためのコマンド ライン インターフェイス (CLI) の実装。

振り返ってみると、Lua を DSL として直接使用するべきでした。それはもっと冗長だったでしょうが、パーサーがすでにそこにあり、多くの Lua テンプレートの選択肢が利用可能であれば、多くの開発労力を節約できたでしょう。

反復構造と、それらが何をする必要があるかについて明確に定義されたルールを持つものについては、コード生成は素晴らしいものになる可能性があります。

于 2011-01-18T03:42:59.633 に答える