Top Banner
リファクタリング サーバ編 AWS上で構築するRESTfulアプリ勉強会 ~Web開発ワークショップ~【第10回】
36

第10回rest勉強会 リファクタリング(サーバ編)編

Jan 21, 2018

Download

Software

ksimoji
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 第10回rest勉強会 リファクタリング(サーバ編)編

リファクタリング サーバ編

AWS上で構築するRESTfulアプリ勉強会 ~Web開発ワークショップ~【第10回】

Page 2: 第10回rest勉強会 リファクタリング(サーバ編)編

概要

Page 3: 第10回rest勉強会 リファクタリング(サーバ編)編

概要1. リファクタリング? 2. リファクタリング手順 3. 「コードの匂い」 4. テスト

Page 4: 第10回rest勉強会 リファクタリング(サーバ編)編

概要1. リファクタリング? 2. リファクタリング手順 3. 「コードの匂い」 4. テスト

Page 5: 第10回rest勉強会 リファクタリング(サーバ編)編

リファクタリング=プログラムの動作を変えずに内部構造を改

善する

Page 6: 第10回rest勉強会 リファクタリング(サーバ編)編

リファクタリングの方法1. メソッドの抽出 2.メソッドの移動 3.オブジェクトによるデータ値の置き換え 4.条件記述の分解 5.メソッド名の変更

等々...

「リファクタリング カタログ」 でググってみてください

Page 7: 第10回rest勉強会 リファクタリング(サーバ編)編

概要1. リファクタリング? 2. リファクタリング手順 3. 「コードの匂い」 4. テスト

Page 8: 第10回rest勉強会 リファクタリング(サーバ編)編

リファクタリングの手順1. リファクタリングすべきか判断する。 2. テストがあるか?なければ書く。 3. リファクタリングする 4. テストする 5. 1に戻る

「5. 1に戻る」、重要!

Page 9: 第10回rest勉強会 リファクタリング(サーバ編)編

概要1. リファクタリング? 2. リファクタリング手順 3. 「コードの匂い」 4. テスト

Page 10: 第10回rest勉強会 リファクタリング(サーバ編)編

コードの匂い

リファクタリングすべきコードは

「匂う」

Page 11: 第10回rest勉強会 リファクタリング(サーバ編)編

不吉な匂い1.重複したコード 2.長すぎるメソッド 3.巨大なクラス 4.多すぎる引数 5.変更の発散 6.変更の分散 7.属性、操作の横恋慕 8.データの群れ 9.基本データ型への執着 10.スイッチ文 11.パラレル継承

12.怠け者クラス 13.疑わしき一般化 14.一時的属性 15.メッセージの連鎖 16.仲介人 17.不適切な関係 18.クラスのインタフェース不一致 19.未熟なクラスライブラリ 20.データクラス 21.相続拒否 22.コメント

Page 12: 第10回rest勉強会 リファクタリング(サーバ編)編

分類してみました1.激臭系 2.蓋を開けたら臭う系 3.メンドクサイ系 4.加齢臭系 5.生臭い系 6.汗臭い系 7.ウソ臭い系

Page 13: 第10回rest勉強会 リファクタリング(サーバ編)編

ひとつだけ紹介1.激臭系

• 長すぎるメソッド •巨大なクラス •多すぎる引数 •スイッチ文

Page 14: 第10回rest勉強会 リファクタリング(サーバ編)編

今回

「長すぎるメソッド」を

「メソッドの抽出」でリファクタリング!

Page 15: 第10回rest勉強会 リファクタリング(サーバ編)編

概要1. リファクタリング? 2. リファクタリング手順 3. 「コードの匂い」 4. テスト

Page 16: 第10回rest勉強会 リファクタリング(サーバ編)編

テスト

•PHPUnit •モック

Page 17: 第10回rest勉強会 リファクタリング(サーバ編)編

ワークショップ

Page 18: 第10回rest勉強会 リファクタリング(サーバ編)編

アップロード が臭う!

Page 19: 第10回rest勉強会 リファクタリング(サーバ編)編

本日のメニュー1. 事前準備

•ブランチ整備 •composer設定 •phpUnitインストール •テストDBの作成

2. Lesson1 PHPUnitの設定と簡単なテスト作成 3. Lesson2 アップロード機能のテスト 4. Lesson3 アップロード機能のリファクタリング

Page 20: 第10回rest勉強会 リファクタリング(サーバ編)編

事前準備• gitのブランチを整える • 前回、前々回不参加の方はテーブル追加、列追加する

Page 21: 第10回rest勉強会 リファクタリング(サーバ編)編

gitのブランチを整える

■masterブランチを前回の内容を終えた状態にする

■masterブランチを元に、今回の作業用である、 「vol/10」ブランチを作成する

Page 22: 第10回rest勉強会 リファクタリング(サーバ編)編

人によって手順が違います!(重要)■前回の内容を途中までやった方 ■前回の内容を完了した方 ■今回から参加の方

gitのブランチを整える

Page 23: 第10回rest勉強会 リファクタリング(サーバ編)編

http://

goo.gl/WEHXqXジーオーオー.ジーエル/ ダブリューイーエイチエックスキューエックス

ここに詳しく 書いております!

Page 24: 第10回rest勉強会 リファクタリング(サーバ編)編

今回のマニュアルにリンクがあります。 ※後ほど説明

第5回と第6回に不参加の方は テーブル追加、列追加をする

Page 25: 第10回rest勉強会 リファクタリング(サーバ編)編

•composer設定 •phpUnitインストール •テストDBの作成

Qiitaの投稿で詳しく!

Page 26: 第10回rest勉強会 リファクタリング(サーバ編)編

各Lessonについては Qiitaの投稿で詳しく!

Page 27: 第10回rest勉強会 リファクタリング(サーバ編)編

PHPUnitテスト失敗時(赤)

Page 28: 第10回rest勉強会 リファクタリング(サーバ編)編

PHPUnitテスト成功時(緑)

Page 29: 第10回rest勉強会 リファクタリング(サーバ編)編

RED GREEN Refactor

のリズム

Page 30: 第10回rest勉強会 リファクタリング(サーバ編)編

public function upload() { $files = $this->getUploadFileParams(); $owner = $this->Auth->user()['id']; $numTodos = 0; $errors = array (); foreach ( $files as $file ) { $fileName = $file['name']; $filePath = $file['tmp_name']; $todos = file($filePath, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $assignee = $owner; $lineNo = 1; foreach ( $todos as $todo ) { $data = array (); $data['todo'] = $todo; $data['status'] = 0; $data['owner'] = $owner; $data['assignee'] = $assignee; $res = $this->TodoList->save($data);

修正前のupload関数

以下略

Page 31: 第10回rest勉強会 リファクタリング(サーバ編)編

クライアントがアップロードを実行した際のPOSTデータを取得する

getUploadFileParams

ログイン中ユーザのIDを取得する getLoginUserId

アップロードされたファイル群を読み込んでTODOとしてDBに登録する

registerFilesAsTodos

アップロードされたファイルを1つを読み込んで配列に格納する

readUploadTodoFile

配列に格納されたTODOをひとつずつDBに登録する

registerTodos

バリデーションエラーがあった場合、内容を整形する

formatValidationErrorMessage

アップロード処理結果のメッセージをクライアント向けに整形する

editUploadResponse

メソッドの抽出

Page 32: 第10回rest勉強会 リファクタリング(サーバ編)編

マニュアル(Qiita)

http:// goo.gl/yWZD5Iジーオーオー.ジーエル/ ワイダブリューゼットディー5アイ

はじめましょう!

Page 33: 第10回rest勉強会 リファクタリング(サーバ編)編

リファクタリングの方法1. メソッドの抽出 2. メソッドの移動 3. オブジェクトによるデータ値の置き換え 4. 条件記述の分解 5. メソッド名の変更

等々...

「リファクタリング カタログ」 でググってみてください

おさらい

Page 34: 第10回rest勉強会 リファクタリング(サーバ編)編

不吉な匂い1.重複したコード 2.長すぎるメソッド 3.巨大なクラス 4.多すぎる引数 5.変更の発散 6.変更の分散 7.属性、操作の横恋慕 8.データの群れ 9.基本データ型への執着 10.スイッチ文 11.パラレル継承

12.怠け者クラス 13.疑わしき一般化 14.一時的属性 15.メッセージの連鎖 16.仲介人 17.不適切な関係 18.クラスのインタフェース不一致 19.未熟なクラスライブラリ 20.データクラス 21.相続拒否 22.コメント

おさらい

Page 35: 第10回rest勉強会 リファクタリング(サーバ編)編

分類してみました1.激臭系 2.蓋を開けたら臭う系 3.メンドクサイ系 4.加齢臭系 5.生臭い系 6.汗臭い系 7.ウソ臭い系

おさらい

Page 36: 第10回rest勉強会 リファクタリング(サーバ編)編

ダウンロードも ちょっと臭くないか?

🍻飲みDev🍕 テーマ