Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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
ありがとうございました