コードの自動生成
最近ではRonR、DSL、古くは4GLなどコードの自動生成を行って開発速度を上げようとする試みは多い。
実際どの程度役立つかはケースバイケースだが、良く似たパターンを大量生産する場合に利用できると効果が大きい。Visual Studioにも様々な自動生成を支援する仕組みがある。代表的なのは型指定されたDataSetやリソースアクセスクラスか、コンポーネントやWeb画面、Window画面もコードの自動生成と考えてよいと思うが、これはあまりにも一般化しているのでわざわざいわないか。
コード生成のパターンもいくつかある。Code Generation Networkによると以下のような分類をしている。
- Code Munger(NDocなどソースコードからヘルプドキュメントを生成するパターン)
- Inline Code Expander(SQL文が埋め込み可能に汎用言語を拡張するようなパターン)
- Mixed Code Generator(ソース中のコメント情報などを利用して自ソースコード内に生成するパターン。一般に画面コードの生成はこのパターンとして考えるようだ)
- Partial Class Generator(定義情報とテンプレートからベースクラスを生成するパターン。型指定されたDataSet)
- Tier Generator Model(レイヤークラスを生成するパターン。データアクセスコンポーネントを自動生成する例が多い)
- Domain Language(特定領域に特化して作成された言語。BPELなど)
さらに、Visual Studioを利用するとこれらを実現できるが、その実装方法がいろいろあって悩ましい。
主なものはこんなものかな。
良く利用するのはカスタムツールでDACとBLレイヤーを生成している。あとは単純な検証ロジックや型指定されたクエリの定義からコードを生成する場合にも利用している。マクロもソースをもとに何か別のソースやドキュメントを生成する場合に若干利用している。アドインはほとんど使っていないな。マクロで代用している感じですね。ソースレベルでクラスの合成(MIXINもどき)などはマクロ+CodeModelを使えば簡単に実現でき実用的なんだけどな。