[社内勉強会レポート] 『テスト駆動開発』読書勉強会 #5

はじめに

こんぬづは、社内のiOSエンジニアに、iPhone Xのポートレートモードで遊ばれている田中です。スポットライト機能がすごい。LGTMにご活用ください。

さて本題に入っていきましょう。

この会の趣旨

この会の趣旨については、第一回のまとめをご覧ください。

それではまとめていきます。

12章 「設計とメタファー」

概要

BankとExpressionというメタファーを用いて多国籍通貨間の計算をやりやすくした章

話し合われた内容

  • 「MoneyがMoneyをplusするのっておかしいよね」という以前の話に対して、それを解消するBankという役割が出てきた
  • 財布や銀行は思いつくかもしれないけどExpression(式)というメタファーはいきなり思いつかないよね
  • Imposterパターンの定義がわからない問題
  • 「既存オブジェクトと同じプロトコルを備え、実装は異なる新たなオブジェクトを作る」という話と、 Null ObjectCompositeのような「あるオブジェクトのふりをする」という話では意味が二つあるように思った
  • Expressionがこの段階では空のインターフェースでしかないので、なぜ登場したのかがわかりにくかった。おそらく著者の中ではこの先どういう設計にするかが見えているから採用したのだろうが、中身が無い(コードが無い)ものはわかりづらいので一息で説明して欲しかった

まとめ

DollarクラスとFrancクラスとの戦い(リファクタリング)が明けて、また新たなトピックに移ってきた部分です。4章 「意図を語るテスト」で話し合っていた お金がお金自身を増やすようなことはなくて、お金を管理する第三者的なオブジェクトを登場させるほうが良くなりそう という部分について触れられている章でした。

メタファーはエンジニアの数だけ生まれる、語れば語りつくせないトピックです。ある概念を説明するために どんな役割を登場させるか、どうすればわかりやすいか は人それぞれです。より一般的な文脈で伝わるような単語選び、役割選びをするのはとても楽しいです。

今回Expressionという表現が出てきましたが、個人的にはいきなり抽象的すぎてわかりづらいと思いました。自分だったら、まずBankを登場させて、そのままBankにお金を計算させたあとに、必要であればExpressionなどが登場するかも、というステップを踏むように思いました。著者はプロフェッショナルなのでExpressionが登場したけど、この題材に初めて触れる読者としては少し早足かも。

実際に本を読んでいる方がこのエントリを読んで、参考になることがあれば幸いです。

関連