Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
リファクタリングを
積み重ねて見える景色
2017/07/22
WEBエンジニア勉強会 #02
自己紹介
Twitter: @secret_hamuhamu (はむ)
尊敬する人:
・Martin Fowler
・Kent Beck
_人人人人人人人人人人_
> リファクタリング <
 ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
リファクタリング事例
(コードはPHPです)
事例1
フラグ引数
// メッセージを登録する
// メールフラグがtrueの場合、メールも送信する
$message->register($mailFlag = true);
数日後
// 機能追加に対応するためフラグが追加される
$message->register($mailFlag = true, $isAdmin = true,
$forcePushFlag = true);
public function regi...
あ
れ
ま
〜
〜
!?
・メソッドが長くなり理解するまで時間がかかる
・変更に自信を持てない
・メールの送信テストをしたいのに、メッセージを
 登録する必要がある
メソッド呼び出しの単純化
// メッセージを登録する
$message->post();
//メールを送信する
$mail->send();
事例2
erクラスやorクラスの乱立
$calculator = new Calculator();
$calculator->calc($salary);
え〜と、Calculatorクラスが給料の
計算をしているのね
Calculatorクラスがcalcするのは
当たり前ダロウ!!
・振る舞いだけのクラスになっている
・クラス名が~erや~orで終了しているクラスが
 数多く存在していると対象領域の理解が
 足りていないサイン
”データ”と”振る舞い”はセット
必ずしも振る舞いだけのクラスが悪ではない
// 給料を計算する
$salary->calc();
事例3
getしてロジックを書く
$binds[‘code’] = $item->getCode();
$binds[‘name’] = $item->getName();
$con->insert($binds);
これは分かる
$stock = $item->getStock();
$basePrice = $item->getPrice();
if ($stock < 30) {
// 在庫が30未満であれば価格を5%増す
return $basePrice * 1...
・コピペの温床になる
・変更に弱く、修正箇所が散らばりテストが大変
オブジェクト指向エクササイズ
Getter/Setter禁止
// 利用者は呼ぶだけ
// 商品の価格を返す
$item->calculatePrice();
リファクタリングを
積み重ねて見える景色
・1ヶ月続けると住み心地が変わってくる
・不明瞭だった仕様が輪郭を帯びてくる
・開発スピードが向上する
・変更に自信が持てる
・よい構造についてアイデアが湧く
リファクタリングを
積み重ねないと見えてこない
どうやって進めよう?
リファクタリングを
進めていくマインド
・動いているコードに敬意を持つ
・エラーを検知できる仕組み大事
・ハードルを下げて始める(コメント/リネームから)
・テストコードは命綱
・長期戦なので自己肯定感を大切に
テストはリファクタリングの為ならず
小さな達成体験を繰り返すことのできる
人生を豊かにする魔法
さあ、リファクタリングを始めよう
Nächste SlideShare
Wird geladen in …5
×

リファクタリングを積み重ねて見える景色

843 Aufrufe

Veröffentlicht am

リファクタリングを積み重ねて見える景色

WEBエンジニア勉強会 #02 (東京都, 神田)
https://connpass.com/event/60947/

Veröffentlicht in: Ingenieurwesen
  • Als Erste(r) kommentieren

リファクタリングを積み重ねて見える景色

  1. 1. リファクタリングを 積み重ねて見える景色 2017/07/22 WEBエンジニア勉強会 #02
  2. 2. 自己紹介 Twitter: @secret_hamuhamu (はむ) 尊敬する人: ・Martin Fowler ・Kent Beck
  3. 3. _人人人人人人人人人人_ > リファクタリング <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
  4. 4. リファクタリング事例 (コードはPHPです)
  5. 5. 事例1 フラグ引数
  6. 6. // メッセージを登録する // メールフラグがtrueの場合、メールも送信する $message->register($mailFlag = true);
  7. 7. 数日後
  8. 8. // 機能追加に対応するためフラグが追加される $message->register($mailFlag = true, $isAdmin = true, $forcePushFlag = true); public function register($mailFlag, $isAdmin, $forcePushFlag) { if ($mailFlag && $isAdmin) { // ユーザにメールを送る } if ($mailFlag && !$isAdmin) { // 運営にメールを送る } ・・・・
  9. 9. あ れ ま 〜 〜 !?
  10. 10. ・メソッドが長くなり理解するまで時間がかかる ・変更に自信を持てない ・メールの送信テストをしたいのに、メッセージを  登録する必要がある
  11. 11. メソッド呼び出しの単純化 // メッセージを登録する $message->post(); //メールを送信する $mail->send();
  12. 12. 事例2 erクラスやorクラスの乱立
  13. 13. $calculator = new Calculator(); $calculator->calc($salary); え〜と、Calculatorクラスが給料の 計算をしているのね
  14. 14. Calculatorクラスがcalcするのは 当たり前ダロウ!!
  15. 15. ・振る舞いだけのクラスになっている ・クラス名が~erや~orで終了しているクラスが  数多く存在していると対象領域の理解が  足りていないサイン
  16. 16. ”データ”と”振る舞い”はセット 必ずしも振る舞いだけのクラスが悪ではない // 給料を計算する $salary->calc();
  17. 17. 事例3 getしてロジックを書く
  18. 18. $binds[‘code’] = $item->getCode(); $binds[‘name’] = $item->getName(); $con->insert($binds); これは分かる
  19. 19. $stock = $item->getStock(); $basePrice = $item->getPrice(); if ($stock < 30) { // 在庫が30未満であれば価格を5%増す return $basePrice * 1.05; } getして制御構文(ロジック)を書くな!
  20. 20. ・コピペの温床になる ・変更に弱く、修正箇所が散らばりテストが大変
  21. 21. オブジェクト指向エクササイズ Getter/Setter禁止 // 利用者は呼ぶだけ // 商品の価格を返す $item->calculatePrice();
  22. 22. リファクタリングを 積み重ねて見える景色
  23. 23. ・1ヶ月続けると住み心地が変わってくる ・不明瞭だった仕様が輪郭を帯びてくる ・開発スピードが向上する ・変更に自信が持てる ・よい構造についてアイデアが湧く
  24. 24. リファクタリングを 積み重ねないと見えてこない
  25. 25. どうやって進めよう?
  26. 26. リファクタリングを 進めていくマインド
  27. 27. ・動いているコードに敬意を持つ ・エラーを検知できる仕組み大事 ・ハードルを下げて始める(コメント/リネームから) ・テストコードは命綱 ・長期戦なので自己肯定感を大切に
  28. 28. テストはリファクタリングの為ならず 小さな達成体験を繰り返すことのできる 人生を豊かにする魔法
  29. 29. さあ、リファクタリングを始めよう

×