はむはむエンジニアぶろぐ

365日エンジニアリング

【リファクタリング】メソッドの引数に同じ変数のセットを何度も渡しているのならば、オブジェクトにしよう

f:id:secret_hamuhamu:20150906230549j:plain
今回は、リファクタリング(?)ネタ。
例えばこんなメソッドがあるとする。(PHPです)

public function login($userLoginId, $userLoginPassword)
{
    // 割愛
}

public function passwordChange($userLoginId, $userLoginPassword)
{
    // 割愛
}

$userLoginId$userLoginPassword が引数に同じ変数のセットとして、渡されている。
もし何度もこの変数セットが登場するのならば、リファクタリングするべきだろう。
これは、コードの嫌な臭いであり、構造化が欠如していることを表す。

構造化しよう

引数に同じ変数のセットが、頻出して登場する際は、構造化が欠けていることを表してるリファクタリングのサインです。
プリミティブ型は、オブジェクトではなく表現力にかける。

よく使われる変数セットは、ドメインを語る関心ごとの塊である。
その関心ごとの塊をオブジェクトにすることで、表現力豊かになる。

public function login(LoginUser $loginUser)
{
    // 割愛
}

public function passwordChange(LoginUser $loginUser)
{
    // 割愛
}

userLoginIduserLoginPassword をプロパティに持つ LoginUser というオブジェクトにした。
LoginUserという概念に抽象化する。

こうすることで、関心ごとを集中させることができる。

オススメの本

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

アジャイルサムライ――達人開発者への道

アジャイルサムライ――達人開発者への道

リファクタリング:Rubyエディション

リファクタリング:Rubyエディション

  • 作者: Jay Fields,Shane Harvie,Martin Fowler,Kent Beck,長尾高弘
  • 出版社/メーカー: アスキー・メディアワークス
  • 発売日: 2010/02/27
  • メディア: 大型本
  • 購入: 9人 クリック: 321回
  • この商品を含むブログ (49件) を見る

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

エリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)

実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる (Object Oriented SELECTION)

実践テスト駆動開発 テストに導かれてオブジェクト指向ソフトウェアを育てる (Object Oriented SELECTION)