前回のふりかえり
第10章②の主旨
- ①から引き続き、しなやかに設計するためのいくつかのパターンについて説明
- 表明
- 副作用のある操作を理解しやすい形で表現するための手法
- 概念の輪郭
- ドメインが持つ概念(論理的な一貫性)を縁取るもの
- 閉じた操作
- 操作を一つの概念の中で完結させる
- 表明
第10章 しなやかな設計
宣言的な設計
- 意味の明白なインターフェースなど今まで紹介したパターンは、役にはたつが従来のOOPに正式な厳密さを与えることはできない。(これらのパターンが実際の処理を制御することはできない)
- 宣言的な設計は、プログラムやその一部をある種の実行可能な仕様として作成する方法。
- 性質を厳格に記述することで、ソフトウェアを実際に制御する
ドメイン特化言語
宣言的な設計を実現する方法として、ドメイン特化言語がある
設計の宣言的スタイル
- 設計的な設計の利点を得るには、意図の明白なインターフェース・副作用のない関数・表明などの要素を組み合わせて使用する
- 下記のような状態が理想
- 要素がその意味を伝えられる状態になっている
- かつ、それが他のものに影響を与える場合はその影響が明示的になっている
- もし影響を与えないのなら、目に見える影響が全くない
宣言的スタイルで仕様を拡張する
- 論理演算子を使用することで、仕様を結合する
- 前提:仕様は述語を改造したもの
- 個々の仕様を、
AND
やOR
などの演算子を用いて組み合わせる。これらの論理演算は述語の下で閉じているので、仕様の組み合わせは閉じた操作になる - このように、単純な要素から複雑な仕様を組み立てる能力があると、コードの表現力が高まる。
攻める角度
巨大なシステムをしなやかな設計にするには、対象を選んで攻める必要がある。
サブドメインを切り取る
- 設計全体に対して一度に取り組むことはできないので、一部を切り出して整理する
- ある領域にだけ大きな衝撃を与えて、設計の一部をしなやかにする方が、薄く広くするよりも有効
確立された形式主義を活用する
- 会計や数学などは、既に確立された概念体系がある。
- 可能であれば、既に形式化された概念フレームワークを活用する
思ったこと・気になったこと
- 10章はすごく長かった...
- 個々のパターンの考え方はそれなりに理解できたが、実際全てを取り入れて手を動かしてみないと本当の意味での理解はできないんだろうなという感じ。