アナログ金木犀

つれづれなるまままにつれづれする

改めて、SOLID(+ α)

こんにちは、kgmyshinです。

この記事は DMMグループAdvent Calendar の6日目の記事となります。 昨日は弊社新卒ありかくん( ありかくんの記事はこちら )に引き続き本日は自分の担当となります。

何かしらの技術ネタだったりを仕込みたかったのですが、時間がなかったのもありまして、今ちょうど作っているSOLID+α原則研修そのものと一部コンテンツの紹介の場とさせてください。 こういう社内研修をやろうとしてますよ、やってますよという宣伝です。

内容としては、N番どころじゃない煎じですが、それでも世間一般に出回ってるコンテンツよりもわかりやすいものを目指してたりはするのでチラ見してもらえると嬉しいです。

f:id:kgmyshin:20191202185653j:plain

本研修では 座学 -> 個人ワーク -> グループディスカッション という流れで行う予定です。

研修のスコープは「SOLID 原則 + CQS原則 + DRY原則です。 ターゲットは「これらを知りたい方、復習したい方」で、研修のゴールとしてはこれらの原則を理解してもらうことで普段の設計・コーディング・レビュー時の質が上がることとしています。

スライドは全部で130ページほどあり、ここでは一部の紹介となりますが、おいおいスライドの外部公開もするので興味ある方はもう少しお待ちください。

参考図書

参考図書は以下になります。

原則の解釈にオリジナリティが出ては困るので、自分でも改めてSOLID原則の章をいくつかの資料で確認しながら作っています。

日程感

(1.5時間~2時間)×2日間 の合計3~4時間となっています。

  • 1日目
    • SRP(単一責務原則)
    • ISP(インターフェース分離の原則)
    • DIP(依存関係逆転の原則)
  • 2日目
    • OCP(オープンクローズド原則)
    • LSP(リスコフの置換原則)
    • CQS(コマンドクエリ分離の原則)
    • DRY(Don’t Repeat Your Self原則)

SOLIDの順番にはしていません。

f:id:kgmyshin:20191202190546j:plain

コンテンツ覗き見

早速いくつかのコンテンツを覗き見してみましょう。

OCP(オープンクローズド原則)

スライド 説明
f:id:kgmyshin:20191202190037j:plain:w300
f:id:kgmyshin:20191202190111j:plain:w300
f:id:kgmyshin:20191202190318j:plain:w300 まずはよくあるOC原則違反の例を示します。
f:id:kgmyshin:20191202190328j:plain:w300
f:id:kgmyshin:20191202190336j:plain:w300
f:id:kgmyshin:20191202190345j:plain:w300
f:id:kgmyshin:20191202190351j:plain:w300 OC原則を守った場合、修正範囲が新しいクラスだけであることを明示し、この後にどうこのクラス設計を導くのかについて軽く触れます。
ブラッシュアップ中なのでスライドは省きますが、SRPやDIPに従ってクラス設計していくことでOC原則を満たすコードが書きやすくなることを説明します

DRY(Don’t Repeat Your Self原則)

DRY原則は誤解も多いのでその誤解をまず解きつつ、またやりすぎてしまう例にもしっかり触れるようにしました。

スライド 説明
f:id:kgmyshin:20191202193935j:plain:w300
f:id:kgmyshin:20191202193942j:plain:w300 誤解が多いところなのでしっかり触れておきます
f:id:kgmyshin:20191202193957j:plain:w300
f:id:kgmyshin:20191202194007j:plain:w300
f:id:kgmyshin:20191202194015j:plain:w300
f:id:kgmyshin:20191202194022j:plain:w300
f:id:kgmyshin:20191202194040j:plain:w300 コード重複の例にも触れておきます
f:id:kgmyshin:20191202194049j:plain:w300
f:id:kgmyshin:20191202194056j:plain:w300 重要なところです
f:id:kgmyshin:20191202194104j:plain:w300 DRY原則を守りすぎることで辛くなる例に触れます
f:id:kgmyshin:20191202194112j:plain:w300
f:id:kgmyshin:20191202194121j:plain:w300
f:id:kgmyshin:20191202194128j:plain:w300 SRPなどを重視しつつ、バランス見てDRYしていきましょう

その後

上記のような座学をやった後に、実際にクラス図を書いてもらったり、原則違反をしちゃってる例を修正してもらう個人ワークを行います。 その後、(なるだけ)普段一緒に働いてるチームメンバーな参加者とグループになってもらい、個人ワークの解答をそれぞれ見せ合っては解釈をチームの共通認識に落とし込んでいくという流れになっております。

所感

まだコンテンツ作り中なので、こういう例題あるといいよねみたいなのあればシュッとtwitterとかで投げてもらえると嬉しいです。

余談

自分のTシャツも登場させました

f:id:kgmyshin:20191206113631p:plain f:id:kgmyshin:20191206113635p:plain

明日は 弊社新卒 slme くんの技術ポエムがあがるそうです。 内容は聞いてないですが、私、とても期待しています。