Slide 1

Slide 1 text

2024 年 6 月 22 日 (土) PHPカンファレンス福岡 @stwile871 Fat Controller は悪か? ~光のFat Controller・闇のガリController~

Slide 2

Slide 2 text

自己紹介 スタヰル(@stwile871) $ PHPer歴7年目 $ リアーキテクチャ・でかいリファクタリング $ 洗車 $ 好きな関数は sprintf()

Slide 3

Slide 3 text

Q. 唐突な質問です

Slide 4

Slide 4 text

Q.FatControllerは悪者ですか? Q.FatControllerは悪者ですか?

Slide 5

Slide 5 text

Q.FatControllerは悪者ですか? ● よく悪口を言われている ● 特級呪物として恨み辛みを孕んでいる😇 Q.FatControllerは悪者ですか?

Slide 6

Slide 6 text

😈 本当にFatControllerは 悪いやつなのでしょうか?

Slide 7

Slide 7 text

👼 本当にThinコントローラは イイやつなのでしょうか?

Slide 8

Slide 8 text

禁断のテーマに一石を投じる

Slide 9

Slide 9 text

アジェンダ 1.Fatコントローラはどこから生まれるのか 2.Fatコントローラについて 3.Thinコントローラについて 4.考察

Slide 10

Slide 10 text

アジェンダ 1.Fatコントローラはどこから生まれるのか 2.Fatコントローラについて 3.Thinコントローラについて 4.考察

Slide 11

Slide 11 text

Fatコントローラはなぜ生まれるのか

Slide 12

Slide 12 text

Fatコントローラはなぜ生まれるのか ● 動くものをつくる 😄

Slide 13

Slide 13 text

Fatコントローラはなぜ生まれるのか ● 動くものをつくる(コントローラにロジックを書く) 😄

Slide 14

Slide 14 text

Fatコントローラはなぜ生まれるのか ● 動くものをつくる(コントローラにロジックを書く) ● 急いで動くものをつくる 😆

Slide 15

Slide 15 text

Fatコントローラはなぜ生まれるのか ● 動くものをつくる(コントローラにロジックを書く) ● 急いで動くものをつくる ● 急いで動くものをつくる 😆

Slide 16

Slide 16 text

Fatコントローラはなぜ生まれるのか ● 動くものをつくる(コントローラにロジックを書く) ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる 😇

Slide 17

Slide 17 text

Fatコントローラはなぜ生まれるのか ● 動くものをつくる(コントローラにロジックを書く) ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる

Slide 18

Slide 18 text

Fatコントローラはなぜ生まれるのか ● 動くものをつくる(コントローラにロジックを書く) ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる ● 急いで動くものをつくる 動くが 整理されていないもの

Slide 19

Slide 19 text

本来踏むべきアプローチ

Slide 20

Slide 20 text

本来踏むべきアプローチ ● 動くものをつくる

Slide 21

Slide 21 text

本来踏むべきアプローチ ● 動くものをつくる ○ 整理されたものをつくる

Slide 22

Slide 22 text

本来踏むべきアプローチ ● 動くものをつくる ○ 整理されたものをつくる ● 動くものを作る

Slide 23

Slide 23 text

本来踏むべきアプローチ ● 動くものをつくる ○ 整理されたものをつくる ● 動くものを作る ○ 整理されたものをつくる

Slide 24

Slide 24 text

本来踏むべきアプローチ ● 動くものをつくる ○ 整理されたものをつくる ● 動くものを作る ○ 整理されたものをつくる 作って、整理する必要がある

Slide 25

Slide 25 text

Q. なぜFatコントローラが生まれるのか?

Slide 26

Slide 26 text

Q. なぜFatコントローラが生まれるのか? A. 作ったもの(動くだけのもの)を 整理していないから

Slide 27

Slide 27 text

アジェンダ 1.Fatコントローラはどこから生まれるのか 2.Fatコントローラについて 3.Thinコントローラについて 4.考察

Slide 28

Slide 28 text

Fatコントローラについて

Slide 29

Slide 29 text

Fatコントローラについて APIのIO処理と具体的なビジネスロジックが 同一ファイルに書かれたクラス

Slide 30

Slide 30 text

Fatコントローラについて ● Request・Responseの処理 APIのIO処理と具体的なビジネスロジックが 同一ファイルに書かれたクラス

Slide 31

Slide 31 text

Fatコントローラについて ● Request・Responseの処理 ● DBアクセス処理 APIのIO処理と具体的なビジネスロジックが 同一ファイルに書かれたクラス

Slide 32

Slide 32 text

Fatコントローラについて ● Request・Responseの処理 ● DBアクセス処理 ● 認証認可処理...etc APIのIO処理と具体的なビジネスロジックが 同一ファイルに書かれたクラス

Slide 33

Slide 33 text

Fatコントローラたらしめるもの

Slide 34

Slide 34 text

Fatコントローラたらしめるもの 1.コードの長さ

Slide 35

Slide 35 text

Fatコントローラたらしめるもの 1.コードの長さ 2.不適切な再利用

Slide 36

Slide 36 text

Fatコントローラたらしめるもの 1.コードの長さ 2.不適切な再利用 多くのエンジニアを苦しめている💩

Slide 37

Slide 37 text

アジェンダ 1.Fatコントローラはどこから生まれるのか 2.Fatコントローラについて 3.Thinコントローラについて 4.考察

Slide 38

Slide 38 text

Thinコントローラについて APIのIO処理と具体的なビジネスロジックが 分散している状態のクラス ● Request・Responseの処理 ● DBアクセス処理 ● 認証認可処理...etc

Slide 39

Slide 39 text

Thinコントローラについて APIのIO処理と具体的なビジネスロジックが 分散している状態のクラス ● Fatコントローラをリファクタリングして目指したい姿のひとつ

Slide 40

Slide 40 text

Thinコントローラについて APIのIO処理と具体的なビジネスロジックが 分散している状態のクラス ● Fatコントローラをリファクタリングして目指したい姿のひとつ ● 適度に凝集度が保たれている、適切に関心の分離がなされている

Slide 41

Slide 41 text

Thinコントローラについて APIのIO処理と具体的なビジネスロジックが 分散している状態のクラス ● Fatコントローラをリファクタリングして目指したい姿のひとつ ● 適度に凝集度が保たれている、適切に関心の分離がなされている ?👤?? 「理想ではあるが、この光は少し眩しすぎやしないか?」

Slide 42

Slide 42 text

APIのIO処理と具体的なビジネスロジックが 分散している状態のクラス Thinコントローラの闇😈

Slide 43

Slide 43 text

APIのIO処理と具体的なビジネスロジックが 分散している状態のクラス ● DBアクセスのクラスのロジックから DBアクセスのロジックを呼ぶ Thinコントローラの闇😈

Slide 44

Slide 44 text

APIのIO処理と具体的なビジネスロジックが 分散している状態のクラス ● DBアクセスのクラスのロジックから DBアクセスのロジックを呼ぶ Thinコントローラの闇😈

Slide 45

Slide 45 text

APIのIO処理と具体的なビジネスロジックが 分散している状態のクラス ● DBアクセスのクラスのロジックから DBアクセスのロジックを呼ぶ ● 循環参照 Thinコントローラの闇😈

Slide 46

Slide 46 text

APIのIO処理と具体的なビジネスロジックが 分散している状態のクラス ● DBアクセスのクラスのロジックから DBアクセスのロジックを呼ぶ ● 循環参照 Thinコントローラの闇😈

Slide 47

Slide 47 text

APIのIO処理と具体的なビジネスロジックが 分散している状態のクラス ● DBアクセスのクラスのロジックから DBアクセスのロジックを呼ぶ ● 循環参照 ?👤?? 「Fatコントローラのときのほうがマシだったのでは…?」 Thinコントローラの闇😈

Slide 48

Slide 48 text

アジェンダ 1.Fatコントローラはどこから生まれるのか 2.Fatコントローラについて 3.Thinコントローラについて 4.考察

Slide 49

Slide 49 text

Fatコントローラたらしめるもの 1.コードの長さ 2.不適切な再利用

Slide 50

Slide 50 text

Fatコントローラはコードが長い Q. コードの長さが悪か?

Slide 51

Slide 51 text

Fatコントローラはコードが長い Q. コードの長さが悪か? A1. 今長いだけ(状態)

Slide 52

Slide 52 text

Fatコントローラはコードが長い Q. コードの長さが悪か? A1. 今長いだけ(状態)で分割可能なのでは💡

Slide 53

Slide 53 text

Fatコントローラはコードが長い Q. コードの長さが悪か? A1. 今長いだけ(状態)で分割可能なのでは💡 ● Single Action Controllerに切り出す

Slide 54

Slide 54 text

Fatコントローラはコードが長い Q. コードの長さが悪か? A1. 今長いだけ(状態)で分割可能なのでは💡 ● Single Action Controllerに切り出す ● private メソッドに切り出す

Slide 55

Slide 55 text

Fatコントローラはコードが長い Q. コードの長さが悪か? A1. 今長いだけ(状態)で分割可能なのでは💡 ● Single Action Controllerに切り出す ● private メソッドに切り出す ● クラス設計

Slide 56

Slide 56 text

Fatコントローラはコードが長い Q. コードの長さが悪か?

Slide 57

Slide 57 text

Fatコントローラはコードが長い Q. コードの長さが悪か? A2. ???「凝集度によるのでは?」

Slide 58

Slide 58 text

Fatコントローラはコードが長い Q. コードの長さが悪か? A2. ???「凝集度によるのでは?」 ● 業務ロジックによる

Slide 59

Slide 59 text

Fatコントローラはコードが長い Q. コードの長さが悪か? A2. ???「凝集度によるのでは?」 ● 業務ロジックによる ● 散らばっていないほうが良いこともある

Slide 60

Slide 60 text

つまり???

Slide 61

Slide 61 text

Fatコントローラが悪い

Slide 62

Slide 62 text

Fatコントローラが悪い コントローラが 整理されていない状態

Slide 63

Slide 63 text

Fatコントローラが悪い コントローラが 整理されていない状態 整理さえできれば救える👌

Slide 64

Slide 64 text

Fatコントローラの可能性 凝集度が高い

Slide 65

Slide 65 text

Fatコントローラの可能性 分割の選択肢を選ぶことができる 凝集度が高い

Slide 66

Slide 66 text

Fatコントローラの可能性 分割の選択肢を選ぶことができる ● アーキテクチャ選定 凝集度が高い

Slide 67

Slide 67 text

Fatコントローラの可能性 分割の選択肢を選ぶことができる ● アーキテクチャ選定 ● 規模感の調整 凝集度が高い

Slide 68

Slide 68 text

Fatコントローラの可能性 凝集度が高い 分割の選択肢を選ぶことができる ● アーキテクチャ選定 ● 規模感の調整 ● モデリングして、再度整理する時間

Slide 69

Slide 69 text

Fatコントローラの可能性 凝集度が高い 分割をしない選択もができる ● アーキテクチャ選定 ● 規模感の調整 ● モデリングして、再度整理する時間

Slide 70

Slide 70 text

つまり??? (2回目)

Slide 71

Slide 71 text

● Fatコントローラは状態であって、救える まとめ

Slide 72

Slide 72 text

● Fatコントローラは状態であって、救える ● Tninコントローラの中にも悪いやつがいる まとめ

Slide 73

Slide 73 text

● Fatコントローラは状態であって、救える ● Tninコントローラの中にも悪いやつがいる ● 野放しにしないで、早めに整理しよう まとめ

Slide 74

Slide 74 text

͓ΘΓ Ask the Speakerで お待ちしています💙