Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
勘所を押さえて良いコードを書く
Search
hiro_shi
September 22, 2024
1
28
勘所を押さえて良いコードを書く
hiro_shi
September 22, 2024
Tweet
Share
More Decks by hiro_shi
See All by hiro_shi
Terraform import blockを使って 既存のAWSリソースをインポートした話
164fm
0
11
Featured
See All Featured
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
17
940
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
930
Testing 201, or: Great Expectations
jmmastey
42
7.5k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Code Review Best Practice
trishagee
68
18k
Docker and Python
trallard
44
3.4k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
What's in a price? How to price your products and services
michaelherold
246
12k
Transcript
勘所を押さえて良いコードを書く 2024-09-21 #GENKI.dev ヒロ氏
自己紹介
お話すること • オブジェクト指向ベースの話 • 読みやすさというより設計ベースの話 • 0 -> 1よりも1 ->
10寄りの話 • バックエンド寄りの話 • PHPベースでお話する
https://gihyo.jp/book/2022/978-4-297-12783-1 https://www.shoeisha.co.jp/book/detail/9784798150727
良いコードってなんやろか
読みやすい? 理解しやすい? それもあるが
プロダクトは作って終わりではない • 改修することがある • 運用もある • 新しく人も入ってくるしコードは読むし書くし
プロダクトは作って終わりではない • 改修することがある • 運用もある • 新しく人も入ってくるしコードは読むし書くし 変更に強い設計であったほうが、 多くのコストを支払わずにスケールすることができる
変更に弱いあるある • 影響範囲わからん。一箇所変更したら他がこわれた。 • 改修前の調査が大変 • 想定していたより時間がかかる • などなど
良いコードって 変更に強いということ (もちろん他にも定義はあると思っていて) (例えば認知負荷が低いとか)
変更に強い設計の勘所 責務 凝集度 単一責任原則 疎結合 目的 etc…
変更に強い設計の勘所 責務 凝集度 単一責任原則 疎結合 目的 etc…
凝集度 ~common.php~
凝集度 ~common.php~
凝集度 ~common.php~ • Commonという名のもとに なんでもかんでも放り込まれてしまう • ~~Managerとかも然り • 本来クラスはデータとロジックの 関連性が高ければ変更に強い
• なので関連するデータとロジックは クラス単位でまとめるべきである • データアクセスはインスタンス変数を使 う(凝集度を高める意味で)
凝集度 ~世直し(本来であればファイルも分ける)~
凝集度 ~世直し(本来であればファイルも分ける)~ • コード全体の見渡しがよくなる • データとロジックが関連することで 車輪の再発明のリスクも減らせる 番外編 • 本当は条件式も変数やインスタンスの
状態を見ないようにすべき • booleanを返す判定用のメソッドをつくる のが好ましい • 「尋ねるな、命じろ」
凝集度 ~世直し(本来であればファイルも分ける)~ • コード全体の見渡しがよくなる • データとロジックが関連することで 車輪の再発明のリスクも減らせる 番外編 • 本当は条件式も変数やインスタンスの
状態を見ないようにすべき • booleanを返す判定用のメソッドをつくる のが好ましい • 「尋ねるな、命じろ」
ソフトウェアにおける責務とは 「ある関心事について、正常に動作するよう制御する責任」 ソフトウェアはいろんな関心事を扱う DB操作、ドメインに対する操作、アプリケーションサービス、 UI層、、、、山程あるな。 で、今回はアプリケーションの設計の話なので。 責務について
• クラスは単一の責任を持つという考え方 • クラスに多くの責任がのしかかると、 それだけでバグのリスクを負う。 ◦ 変更に弱い ◦ 再利用性の低下 ◦
テストカバレッジの低下 • なのでクラスは一つの責任・機能に集中すべき 単一責任原則を結局話す
単一責任原則を結局話す
単一責任原則を結局話す
番外編
コメントアウト
https://twitter.com/t_wada/status/904916106153828352 コメントアウト
おこなっている処理よりも なぜそうしたか?の文脈がわかるほうが改修コストがかからない 例) // 浮動小数点をフロントに返したら表示がバグるので、 // 丸め処理をしている コメントアウト
Early Return
Early Return
ありがとうございました