delhi09の勉強日記

技術トピック専用のブログです。自分用のメモ書きの投稿が多いです。あくまで「勉強日記」なので記事の内容は鵜呑みにしないでください。

『リファクタリング』読書メモ (フェーズの分離 [Splite Phase])

概要

マーティン・ファウラーの『リファクタリング』が勉強になることがたくさん書いてある素晴らしい本だったので、読んだ感想や考えたことをセクション毎などの適当な粒度でメモしていきたいと思う。

www.ohmsha.co.jp

今回は「第6章 リファクタリングはじめの一歩」の「フェーズの分離(p.160)」について書く。

「フェーズの分離」の概要

一つのコードが二つ以上の異なる処理を行っている場合には、二つ以上の「順次処理ステップ」に分解するとよいということが書かれている。
※ 「順次処理ステップ」というのは、本書のサンプルコードをみた限り、事実上、関数のことだと考えて良さそうである。

加えて、処理を直列に分割するということは、前の処理のアウトプットを次の処理のインプットとして渡す必要があるということなので、「中間データ構造」を定義・導入する必要があるということも書かれている。

感想

技術的に難しいことは何も書かれていないし、ある程度プログラミング経験がある人であれば、このリファクタリング手法を使っていると意識していなくても、自然とやっている事が多いんじゃないかと思った。

あとは、設計書を作成するときに、アクティビティ図を書いたり、文章で書くにしても

1. xxxの処理を行う。
2. yyyの処理を行う。

のように処理をグルーピングしてNoを付けて書いたりすることが多かったが、これもやっていることは処理を意味内容ごとに分割するということなので、「フェーズの分離」という考え方をしていたのだと思う。

ただ、経験則でなんとなくやるのではなくて、「今、自分はフェーズの分離をしているのだな」と意識しながら作業した方がもちろん良いので、そういう意味ではリファクタリングの1技法として体系的に学びなおせてよかった。

加えて、処理を関数に分割する際に、副作用のある処理をなるべく特定の関数に閉じ込められるように意識すると、ユニットテストも書きやすいコードになるんだろうなと思った。