Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

書籍 Productive Programmer | 小は大を兼ねる。Composed Methodの有用性について

パンくず

書籍 Productive Programmer
Composed Methodの有用性について

概要

Composed Methodの有用性について説明します。

Compose Methodとは?

ダラダラと書かれた処理の中から
意味のある塊ごとにMethodとして抽出すること。

Compose Method自体について詳しくは以下を参照
Refactoring to PatternsのSimplification、Compose Methodより
※ここでいうComposed Methodと上記のCompose Methodは同じ

Productive ProgrammerではComposed Methodの目安としては
Javaなら1Method15行、Rubyであれば1Method5行程度までに収まるようにすることを
推奨しています。他の書籍でもオブジェクト指向言語で作成するMethodの粒度としては
1Method10行前後などと記述してますね。
おそらく実際の開発現場では1Method数百行。1クラス数千行などはざらでしょうから
Compolse Methodを適用するさぞかし爽快でしょう。

ちなみにとある人と開発してるとせっかく適用したCompose Methodを
全部インライン化されるのでその人と仕事する時は泣く泣く長ったらしいMethodを書きますが。

副次的な効果

Compose Method自体には対象クラスのコードの可読性を高め、
実装をシンプルにする効果がある。

このことが様々な副次的効果をもたらします。

▼シンプルになったことでテストが容易になる
TDDに慣れた技術者であれば、自然とCompose Methodを行なっているでしょう。
意味を持った短いコードに対してテストを行うため、テストが容易になり
品質も高まります。

▼他のリファクタリングの基礎となる
処理がシンプルになったことで、他のリファクタリングを適用しやすくなります。
例えば、抽出されたCompose Methodの中に基底クラスに以降出来るような重複Methodが複数あれば
対象のMethodを移動するだけでMethodの引き上げを行うことが出来ます。

▼コードの臭いが強くなる
長いコードに紛れて埋もれていた、リファクタリングすべきコードの臭いが強くなります。
例えば、小分けにされたコードが対象クラスに依存しない汎用的な処理であれば
独立したクラスを抽出して他のプロジェクトでも流用できるような機能として活用することが出来ます。

また、Compose Methodで処理の流れを同じ粒度で切り出すことでTemplate Methodパターンの
適用が必要な臭いを嗅ぎ取ることが出来ます。

よく大は小を兼ねると言いますが、プログラムの世界では小は大を兼ねるですね。
General: The greater also serves for the lesser.
Program: The lesser also serves for the greater.