Slide 1

Slide 1 text

勘所を押さえて良いコードを書く 2024-09-21 #GENKI.dev ヒロ氏

Slide 2

Slide 2 text

自己紹介

Slide 3

Slide 3 text

お話すること ● オブジェクト指向ベースの話 ● 読みやすさというより設計ベースの話 ● 0 -> 1よりも1 -> 10寄りの話 ● バックエンド寄りの話 ● PHPベースでお話する

Slide 4

Slide 4 text

https://gihyo.jp/book/2022/978-4-297-12783-1 https://www.shoeisha.co.jp/book/detail/9784798150727

Slide 5

Slide 5 text

良いコードってなんやろか

Slide 6

Slide 6 text

読みやすい? 理解しやすい? それもあるが

Slide 7

Slide 7 text

プロダクトは作って終わりではない ● 改修することがある ● 運用もある ● 新しく人も入ってくるしコードは読むし書くし

Slide 8

Slide 8 text

プロダクトは作って終わりではない ● 改修することがある ● 運用もある ● 新しく人も入ってくるしコードは読むし書くし 変更に強い設計であったほうが、 多くのコストを支払わずにスケールすることができる

Slide 9

Slide 9 text

変更に弱いあるある ● 影響範囲わからん。一箇所変更したら他がこわれた。 ● 改修前の調査が大変 ● 想定していたより時間がかかる ● などなど

Slide 10

Slide 10 text

良いコードって 変更に強いということ (もちろん他にも定義はあると思っていて) (例えば認知負荷が低いとか)

Slide 11

Slide 11 text

変更に強い設計の勘所 責務 凝集度 単一責任原則 疎結合 目的 etc…

Slide 12

Slide 12 text

変更に強い設計の勘所 責務 凝集度 単一責任原則 疎結合 目的 etc…

Slide 13

Slide 13 text

凝集度 ~common.php~

Slide 14

Slide 14 text

凝集度 ~common.php~

Slide 15

Slide 15 text

凝集度 ~common.php~ ● Commonという名のもとに なんでもかんでも放り込まれてしまう ● ~~Managerとかも然り ● 本来クラスはデータとロジックの 関連性が高ければ変更に強い ● なので関連するデータとロジックは クラス単位でまとめるべきである ● データアクセスはインスタンス変数を使 う(凝集度を高める意味で)

Slide 16

Slide 16 text

凝集度 ~世直し(本来であればファイルも分ける)~

Slide 17

Slide 17 text

凝集度 ~世直し(本来であればファイルも分ける)~ ● コード全体の見渡しがよくなる ● データとロジックが関連することで 車輪の再発明のリスクも減らせる 番外編 ● 本当は条件式も変数やインスタンスの 状態を見ないようにすべき ● booleanを返す判定用のメソッドをつくる のが好ましい ● 「尋ねるな、命じろ」

Slide 18

Slide 18 text

凝集度 ~世直し(本来であればファイルも分ける)~ ● コード全体の見渡しがよくなる ● データとロジックが関連することで 車輪の再発明のリスクも減らせる 番外編 ● 本当は条件式も変数やインスタンスの 状態を見ないようにすべき ● booleanを返す判定用のメソッドをつくる のが好ましい ● 「尋ねるな、命じろ」

Slide 19

Slide 19 text

ソフトウェアにおける責務とは 「ある関心事について、正常に動作するよう制御する責任」 ソフトウェアはいろんな関心事を扱う DB操作、ドメインに対する操作、アプリケーションサービス、 UI層、、、、山程あるな。 で、今回はアプリケーションの設計の話なので。 責務について

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

https://twitter.com/t_wada/status/904916106153828352 コメントアウト

Slide 26

Slide 26 text

おこなっている処理よりも なぜそうしたか?の文脈がわかるほうが改修コストがかからない 例) // 浮動小数点をフロントに返したら表示がバグるので、 // 丸め処理をしている コメントアウト

Slide 27

Slide 27 text

Early Return

Slide 28

Slide 28 text

Early Return

Slide 29

Slide 29 text

ありがとうございました