Clean Code ch8 Boundaries
- Boundaries
- Using Third-Party Code
- Exploring and Learning Boundaries
- Learning Log4j
- Learning Tests Are Better Than Free
- Using Code That Does Not Yet Exist
- Clean Boundaries
- 英語
Boundaries
- 全てのコードを自分たちの支配下に置けるとは限らない
- これらの「外部のコード」を自分たちのコードに綺麗に組み込まなければならない
- 本章では、クリーンな境界を維持する実践とテクニックに目を向ける
Using Third-Party Code
- インタフェースの綱引き
- サードパーティ: 広く適用できるインタフェースを追求する
- 多くの環境で幅広いユーザに売り込みたいから
- 利用側: ニーズ特化のインタフェースを求める
- サードパーティ: 広く適用できるインタフェースを追求する
- ライブラリの生の
Map
などを直接引き回すべきではない - なぜ
- 自前のクラス(boundary)に閉じ込めよう
- 【補】集約と委譲
Map
かMap<T>
か、といった実装の詳細は隠蔽される
Exploring and Learning Boundaries
- サードパーティAPIを学習するのは大変
- サードパーティAPIを自分たちのソフトウェアに組み込むのはもっと大変
- 同時にやろうとすると二重に大変
- サードパーティのコードを理解するためのテストを書こう
- サードパーティのコードをテストするのは自分たちの仕事ではない
- が、利用する部分を理解するためにテストを書き起こす
- Jim Newkirk はこの類のテストを「learning tests」と呼んでいる
Learning Log4j
- バグか、少なくとも一貫性のない仕様のあるログライブラリを学習する例
- 躓きながらドキュメントを読んだりググったりして調べていく
- 得た知識を単体テストに書き起こす
- 最終的に自前のロガークラス(boundary)にカプセル化する
Learning Tests Are Better Than Free
- learning testsを書いた後で振り返ってみると、余計なコストはかからなかったことがわかる
- サードパーティコードの学習はどのみち行わなければならなかった
- 知識を得るうえで、learning testsは簡単で隔離された方法だった
- 理解を進めるうえで、learning testsは正確な実験だった
- 【補】コードとして実行可能・再現性があるという意味合いかな
- さらにポジティブな見返りもある
- learning testsを書かなかったとしても、結局boundaryクラスのoutboundのテストは書くべき
- さもないと怖くてサードパーティコードをアップデートできなくなりがち
Using Code That Does Not Yet Exist
- わかっているところ(自分たちの世界)と不明なところ(新しい世界)とを分離する
- 例: 分業していて、依存モジュール待ちの場合
- Adapter Pattern (GoF)を使え
- 作業がブロックしないようにinterfaceだけ切っておく
- このinterfaceはテストにも有用
- Fakeを使ってクライアントコードをテストできる
- 【補】Service Stub (PofEAA)
Clean Boundaries
英語
- be inhibited from doing
- ...するのを(心理的に)抑制された
- 変更箇所が甚大で触りたくない、みたいな
- ...するのを(心理的に)抑制された
- off the edge
- 正気を失って
- accommodate
- 余地がある
- lest
- ...するといけないから