これまでの第十章
宣言的な設計
コードの自動生成?
いくら表明を使ったり、意図の明白なインターフェースなどのパターンを駆使して、モデル駆動で設計しても、結局はどこかで副作用は発生し、手続きをどこかで書かなくてはいけませんね。
じゃあということで、コードの自動生成ツールを使ってみてはということになります。
完全な宣言的設計。宣言に基いて設計を書けばソースコードが生成されるツールってありますよね。
しかし、エヴァンスはこれを否定しています。理由は
- 必要なことをすべて行えるほど表現力豊かではない
- 拡張が困難
- 手書きのコードに組み込み、再生成するとコードが破壊されてしまう。
今でもこの課題って解決されていないのではないでしょうか?
ルールベースプログラム?
じゃあということで、次にあげられるのはルールベースプログラムのフレームワーク。自分も使ったことは無いですが、これもエヴァンスは否定的です。
- 制御コードが副作用を持ち込む
- ルールの追加・削除・再編成によって予期しない結果になることもある
- 開発者によってコードが付け加えられると破綻する可能性がある
- 誰もがフレームワークのルールに従わなければならない
ただ、そんなフレームワークのなかでも局所的に使われるフレームワークは価値があったといいます。例えば、永続化・O/Rマッピングツールなどです。これらは開発者の負担を減らし、設計の自由を残したまま利用できます。
ドメイン特化言語?
一昔前に流行ったDSLですね。DSLを使えばプログラムは表現力豊かになり、ユビキタス言語とも強く結びつけることができます。
しかし、DSLにも欠点が・・・
- DSLの保守が必要。モデルを改良するのに、DSLを修正できなくてはならない
- アプリケーションとモデルが同じ言語でシームレスに実装されなければならない。
設計の宣言的スタイル
宣言的な設計の利点を多く得るには、これまで読んできた意図の明白なインターフェース・副作用のない関数・表明などのパターンを駆使して、しなやかな設計にしていくことが結局は一番近道ということですね。
「宣言的な設計」ではなく「宣言的スタイル」と言っているところがまた絶妙な表現だったりします。