Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
いいコードを書くための勉強会(単一責務の原則について)
Search
にんじん
July 02, 2022
Programming
130
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
いいコードを書くための勉強会(単一責務の原則について)
ある大学サークルの勉強会資料
単一責務の原則についてまとめた
にんじん
July 02, 2022
Other Decks in Programming
See All in Programming
なぜCTOを降りてFDEを選んだのか?〜なぜプロダクト企業がFDEで顧客の現場に踏み込むのか〜
gonta
1
220
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
280
設計次第でAIコードの読む量は減らせる / designing-for-code-reading
minodriven
35
17k
Simple Storage Service(S3) is not simple
iwatsukayura
0
290
外から家のPCの電源入れたい!をPHPで解決する
kawashimo0
1
140
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
110
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
當我們開始不讀 Code - AI Agent 時代,Code Review 與 Clean Code 還剩下什麼?
jame2408
1
260
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
800
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
作って学ぶSpring BootのAuto Configuration / JJUG Night Seminar 2026-10-19
rshindo
0
180
Featured
See All Featured
Thoughts on Productivity
jonyablonski
76
5.4k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
540
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
490
The Mindset for Success: Future Career Progression
greggifford
PRO
0
540
[SF Ruby Conf 2025] Rails X
palkan
3
1.5k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
Building Better People: How to give real-time feedback that sticks.
wjessup
371
20k
Producing Creativity
orderedlist
PRO
348
41k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
630
Transcript
いいコードを書くための勉強会 単一責任の原則
Q コードを書く時,または実装の方針を考えている時に意識している ことはありますか??
A 僕はSOLIDを意識しています!
SOLID???
今回のゴール ・SOLID原則の一つである単一責任の原則について知る ・いいコードを書くモチベーションのきっかけをつくる ・リファクタリングや設計に入門するイメージを持つ ・アプリの設計をしたくなる
今回のゴールじゃない ・MVCやMVVMなどの設計パターンについて学ぶ MVC
SOLID原則とは ソフトウェア構築時に従うべきガイドラインで、ソフトウェアの拡張性や保守性を高めるた めの5つの原則を指す。 ・S (Single Responsibility) 単一責任の原則 👈 ・O (Open-Closed) オープン・クローズドの原則 ・L (Liskov
Substitution) リスコフの置換原則 ・I (Interface Segregation) インターフェイス分離の原則 ・D (Dependency Inversion) 依存性逆転の原則 今回はS(単一責任の原則)について詳しく触れていきます
単一責任の原則
単一責任の原則 ・各クラスはそれぞれ一つだけの責務を持つべきである ・変更するための理由が、一つのクラスに対して、一つ以上あってはならない
単一責任の原則(解説) アクターとモジュールを用いて解説します ・アクター システムにアクセスする利用者や外部システムが、システム(主体)に対して果たす役割を示したもの。 ・モジュール クラス、構造体、関数など、ロジックが詰まっているもの
単一責任の原則(解説) Employeeは以下の3つのメソッドを持ってい る。 ・calcuratePay() 給料の情報をCFOへ報告 ・reporyHour() 社員の労働時間をCOOへ報告 ・save() データベース内の情報をCTOへ報告 https://zenn.dev/chida/articles/2e42d7eddcf185
アクター モジュール
単一責任の原則(解説) Employeeクラスは3つのアクターに対して責務 を負っているため、単一責任を違反している。
単一責任の原則(解説) PayCalculator calculatePay() HourReporer reporyHours() EmployeeSaver saveEmployee() 解決例 それぞれのメソッドを別クラスに移動し、アクターに対 する責務を一つにする。
今回の例だとこれで単一責任の原則を満たす。 CFO COO CTO
単一責任の原則が満たされてなかったら ・ある責務の変更が別の責務に影響を及ぼす ・テストをする際に、変更を加えていない異なる責務にも対応する必要がある
単一責任の原則の注意点 各クラスはそれぞれ一つだけの責務を持つべきである 👆この言葉をそのまま覚えているとちょっと危険?? 飽くまで、一つのアクターに対して、一つのモジュールを持たせるべきだという原則であ る。
単一責任の原則の注意点 誤った例 PayCalculator calculatePay() 左の図は、ただひたすらに、モジュールの責務を分 割している。 それぞれのモジュールの責務が小さければ小さい ほど良いというものではない。 多すぎるモジュールは逆に拡張性や保守性落とす 場合がある
”一つのアクターに対して、一つのモジュールを持たせるべきだ”の意味を きちんと理解して覚えましょう まだ分割できそう まだ分割できそう
単一責任の原則(まとめ) ・単一責務の原則は”変更するための理由が、一つのクラスに対して、一つ以上あって はならない”という原則 →”一つのアクターに対して、一つのモジュールを持たせるべき” ・理由は、責務が多いと、拡張性や保守性を低下させてしまうため ・テキトーに責務を分割するのではなく、しっかりと原則の意味を理解しよう!
単一責任の原則(おまけ) ビジネスへの関心が薄く理解が浅いと単一責任設計が困難 アクターの求める責務を理解しないとそもそも単一責務にできない。 そのためには、アクターが関わるドメインの知識は最低限必要である ってことだと思う 詳しくは👇で https://qiita.com/MinoDriven/items/76307b1b066467cbfd6a
さいごに ・今回学んだことは設計を始める前の事前知識 ・設計をするためには、他にも学ぶべきことがたくさんあります。 ・SOLID原則の他にもさまざまな、原則や思考?があるので調べてみてください (DRY原則、KISS原則など) 情報工の講義では、ソフトウェア工学とかが近いかも?
良いコードが何かを知らなければ、、、 https://note.com/cyberz_cto/n/n26f535d6c575
クソコードを書くことに批判的になりすぎない ”クソコードを書きまくって後で悩む ”を繰り返して学んでいきましょう
今回の勉強会が少しでもいいコードを書くことや設計に関する モチベーションにつながるといいなぁと思います。 今回学んだことはすぐには成果が出ないかもしれないですが、と ても大切でどの領域にも通づることです。
参考 Clean Architecture 達人に学ぶソフトウェアの構造と設計 https://www.kadokawa.co.jp/product/301806000678/ 設計を知るための第一歩を踏み出そう https://speakerdeck.com/macnekoayu/she-ji-wozhi-rutamefalsedi-bu-wota-michu-sou