Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20年以上のレガシーシステムで始めるリファクタリングの半歩 / RAKUS Meetup Refactoring

dShikata
September 08, 2022
1k

20年以上のレガシーシステムで始めるリファクタリングの半歩 / RAKUS Meetup Refactoring

dShikata

September 08, 2022
Tweet

Transcript

  1. #RAKUSMeetup 自己紹介 • シカタ ダイスケ • 株式会社ラクス メールディーラー/開発チームリーダー • 多趣味おじさん

    料理/酒(ハイボール、お茶系)/オーディオ/カメラ/ スポーツ観戦(サッカー、野球、競馬)/ランニング/ダーツ/コーヒー
  2. #RAKUSMeetup “レガシーシステム”あるある // javascriptが文字列で定義 $js = "<script>"; $js .= "alert(123);";

    $js .= "</script>"; // DBアクセス $sql = "select * from hoge_table"; $result = $db->exec($sql); // 何かのロジック $hoge = commonFunction(); // 突然のprintでHTML出力 if ($hoge === "hoge") { print "<div>"; print "hogehoge"; print "</div>"; } else if ($hoge === "fuga") { print "<div>"; print "fugafuga"; print "</div>"; } else { print "<div>"; print "piyooo"; print "</div>"; } ビューロジックとビジネスロジックが混在
  3. #RAKUSMeetup “レガシーシステム”あるある class ReceiveMail { // 受信したメールを解析処理 // DBに取り込む //

    受信をトリガーに連動する処理が続く … // 神クラスの出来上がり } class SendMail { // 作成されたメールからメールデータ作成 // 送信をトリガーに連動する処理が続く … // 新規作成、返信、転送、送信予約 …などなどいろんなメール種別ごとの処理 // 神クラスの出来上がり } 上から下へ処理がベタ書きの神クラス
  4. #RAKUSMeetup “レガシーシステム”あるある // 便利な関数がいっぱいの神クラス!! // 気づけば1万行超え!! class commonFunctions { function

    commonFunction1 () { // あるテーブルからデータ取得する便利な関数 } function commonFunction2 () { // いろんな画面に表示されるとある項目を描画する便利な関数 } function commonFunction3 () { // いろんな画面から呼ばれる条件分岐をまとめた便利な関数 } } 便利な神共通関数たちを従える神クラス
  5. #RAKUSMeetup つまり、こういうこと。 何も考えずにやると、各ロジックで新UIの分岐が増殖する // javascriptが文字列で定義 $js = "<script>"; $js .=

    "alert(123);"; $js .= "</script>"; // DBアクセス $sql = "select * from hoge_table"; $result = $db->exec($sql); // 何かのロジック $hoge = commonFunction(); // 突然のprintでHTML出力 if ($hoge === "hoge") { print "<div>"; print "hogehoge"; print "</div>"; } else if ($hoge === "fuga") { print "<div>"; print "fugafuga"; print "</div>"; } else { print "<div>"; print "piyooo"; print "</div>"; } ~~~ // 突然のprintでHTML出力 if ($hoge === "hoge") { if ($isNewUI) { print "<div>"; print "new ui is cool."; print "</div>"; } else { print "<div>"; print "hogehoge"; print "</div>"; } } else if ($hoge === "fuga") { print "<div>"; print "fugafuga"; print "</div>"; } else { if ($isNewUI) { print "new ui is cool."; } print "<div>"; print "piyooo"; print "</div>"; }