- 製品指向で可変性を記述した場合,製品に対応したコードを生成するときには製品名のマクロを定義すればいいので楽ですが,そのかわり製品を追加するたびにプログラムコードを改変する必要があります.
- フィーチャー指向で可変性を記述した場合,プログラムコードの変更は製品指向と比べて少なくてすみますが,ビルドするときにフィーチャーを細かく指定する必要があります.
両方のいいとこ取りはできないのでしょうか? 実はできます.フィーチャー指向で可変性を記述し,ビルドファイルで製品指向からフィーチャー指向への変換をすればいいのです.
たとえば次のような製品マップだったとしましょう.
製品 A をビルドするときにはフィーチャーX,Z を,製品 B をビルドするときにはフィーチャーX,Yを指定する必要があります.この対応関係をビルドファイル中に記述します.たとえば,PRODUCT_A が定義されていたときには FEATURE_X, FEATURE_Z を定義するように書くわけです.このような情報をコンフィギュレーションといいます.
このとき製品指向とフィーチャー指向は上の図のようなレイヤー構造(階層構造)にあります.まず可変性を具体的に記述するのはフィーチャー指向で行います(下の層).その可変性記述のメカニズムを利用して製品指向の可変性記述をコンフィギュレーションとして記述します(上の層).上の層が下の層の機能を使って実現されているとき,その構造をレイヤー構造といいます.
以上をまとめると,次のような表になります.
僕は,おそらくこの発見(製品指向の利点はフィーチャー指向でも実現できる)が,フィーチャー中心のプロダクトライン開発の原点ではなかったかと思っています.裏をとりたいので,何か情報をお持ちの方はお知らせください.
つづく