自分の理解を深めるために投稿します。
第5章:コンストラクションにおける設計
設計の特徴、難題
-
設計はルーズなプロセス
-
妥協と優先順位付けによって生まれる
-
制限がつきもの
-
設計の答えは1つでは無い
-
万能ツールは存在しない
-
設計は創発的
- 話し合い
- 経験
- 設計レビュー
重要な設計概念
- 複雑さへ対応すること
- 分割することが鍵
- 一度に対処しなければならない本質的な複雑さを最小限に抑える
- 偶発的な複雑さを必要以上に増やさない
(注) 本質的:物事が物事であるために不可欠なこと / 偶発的:物事が物事であるかに影響しないこと
-
完成した設計がどのようであるべきか、たくさんの指針がある
- 保守性・疎結合・拡張性など…
-
上記を達成するための方法も、沢山紹介されている
- 首尾一貫した抽象化・カプセル化・継承など…
設計のプラクティス
-
反復すること
- 1回目の設計より2回目の設計がうまくいく
-
分割攻略
- インクリメンタル方式
-
トップダウン方式とボトムアップ方式
- どちらが優れている、とかはない
- より合うほうを試して経験を積むことが大事
-
設計のためだけのプロトタイプを作る
- 必要最小限のコード
- 実際のコードに生かそうと考えるとうまくいかない
-
設計は1人より2人で行うと良いことがある
-
どこまで設計すべきか
- コーディングできると判断できるまで