https://yr-camp.connpass.com/event/345890/
こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。
やったこと
引き続きTradingCardGameKataのお題を議論しながら作り込んでいきました。
作ったコミット
話したこと
最初に簡単に前回までのおさらいをした後、現状の実装だとManaCharge()の実装が仕様に沿っていないけどそれは良いのか?という話をしましたが、現状の断面だとそういう仕様に対応していないというだけなので一旦おいておくことにしました。
次に、今回のテストケースをGreenにする手立てとして、Manaと一口に言っても3つの概念があるからそこを分けていく必要がありそうだという話になり、一旦実装を進めた後適切な名前は何がいいのだろう?と議論しました。
3種類それぞれ微妙に概念が重なり合っているので難しいなあと思っていたのですが、上限値という意味での「Limit」とそのターンで使える最大値という意味の「Max」とそのターンで使える残りのという意味での「Remained」の3種類にManaの概念を分割しました。
この結果、コードを見るとManaはクラスとして切り出したほうがすっきりしそうだという話になり、リファクタリングをしていきました。
コピペして呼び出し元をさくっと変えれば良さそうな感じもありましたが、一応今回は安全に改修をする練習ということで、Redになる瞬間がないように、最初に元々呼び出していたメソッド群に新しいクラスの処理を委譲し、そこからテストクラスの呼び出し元のシグニチャを一個ずつ変えていくことにしました。
このタイミングのリファクタリングとして、Manaを切り出すというのはどうなんだろうか?(まだ早いのでは?)という意見も出ていたのですが、実際にやってみるとPlayerクラスの見通しが格段に良くなりましたし、切り出すほうがいいのではないか?という話が出たきっかけはManaの概念を名前変更を通して3分割したことがきっかけだったので、名前を丁寧につけることの重要性を実感しました。