Open2

ちょうぜつソフトウェア入門

Kotaro SuzukiKotaro Suzuki

6章 テスト駆動開発

  • オブジェクト指向プログラミングというのは、先に下位の具象レベルを揃えるよりも先に上位の抽象を安定させそれに依存して下位構造を作っていこうとする考え
  • スタブというのは相手が正しく動くかどうかに関係なく、「仮に正しい結果を得られたとしたら」と仮定するダミーオブジェクト
  • モックは、サブモジュールの本来の機能に反って検証できる。テストのアサーションとして意味があるのはモックの方
  • スタブとモックの使用は諸刃の剣。下位の修正でバグが入った時に回帰テストで見抜けない
  • テスト駆動開発では綺麗なアルゴリズムで描くことの優先順位は低い。それよりも漏れのないテストを書くことが優先される
  • まずは愚直な実装コードを書く。そうすることでテストコードと実装の振る舞いが同じ歩調で育つ
  • BDD(Behavior Driven Development)。クラスやモジュール単位ではなくユーザーが使う機能のレベルでテストを作成する。テストファーストであることはTDDと同じ。テスト粒度の考えた方が違う
  • BDDの目的は仕様通り動く実装を得ること
Kotaro SuzukiKotaro Suzuki

8章デザインパターン

FacadePattern

複数の機能オブジェクト群へのアクセスを集約するパターン。
ファサードは玄関を意味する。機能群へのアクセスはFasadeのみとして利用者と機能の関係をシンプルにする。
利用者にとってはファサードのインターフェースのみが重要であって中身は重要でない。
利用者はファサードを通してのみ機能群へアクセスさせる。裏口は認めない。

Point
Fasadeの目的は「単純化」。

sample
https://github.com/Kotarosz727/head_first_design/tree/main/07_adapter_pattern_facade_pattern/FacadeSample

https://github.com/Kotarosz727/my_php/tree/main/src/AbstractFizzBuzz

MediatorPattern

Facadeパターンが外部との境界に対するアプローチであることに対して、Mediatorパターンは内部の制御の流れに対するアプローチ。
例えばObjectA, B, C ...と複数の機能オブジェクトがあり、それらが依存する場合その制御をMediatorパターンに集約させる。Object間はお互いを知らない。

ProxyPattern

既存のオブジェクト間に、別のオブジェクトを割り込ませて、振る舞いを拡張させるパターン。
クライアントはその割り込まれたオブジェクトの存在を知らない。クライアントから見た場合、メソッドの使用方法は同じ。

sample
https://github.com/Kotarosz727/my_php/tree/main/src/Proxy

Decorator Pattern

デコレータパターンは、オブジェクトに追加の責任を動的に付加する。デコレータは、機能を拡張するためのサブクラス化の柔軟な代替手段を提供。
 
sample
https://github.com/Kotarosz727/head_first_design/tree/main/03_decorator_pattern