
二郎ラーメンでわかる!SOLID原則!
こんにちはkubopです。
今回は二郎ラーメンでSOLID原則が伝わるかどうかの実験をしてみようという試みです。
きっかけはこちらのツイートです。
世界一分かりやすい「依存性逆転の原則」の説明 pic.twitter.com/hWm0AFlmSA
— ascii オプションを作った人 (@fuwasegu) February 3, 2023
依存性逆転の原則がエナジードリンクで表現されていました。
これについて以下のようなツイートがされていました。
二郎かインスパイア系かみたいな話 https://t.co/c1FdAig4LS
— しもP (@smdhogehoge) February 3, 2023
これはすごい。二郎ラーメンは二郎ラーメンを表現する抽象があって、その抽象に従って二郎インスパイアが実装されているのだと気が付きました。
二郎ラーメンっぽさ( = 抽象)
人が思う二郎ラーメンのイデア
二郎ラーメン( = 具体)
二郎インスパイアラーメン( = 具体)
という関係性になっていることがわかりました。
単一責任の原則
クラスは、単一の責任を持つべき
二郎ラーメン・坦々麺・しょうゆラーメンはそれぞれの役割を持つ。
二郎ラーメンは「飲食できる」機能があり、それ以外の機能をつけない方が良い。
二郎ラーメンは「食べられるし、歩くことができる」ような機能があってはならない。

オープン・クローズドの原則
クラスは、拡張にはオープンで、変更にはクローズドであるべきだ。
二郎ラーメンはナポリタンになる事がないようにするべき。
二郎ラーメンは煮卵を追加しやすくなるようにするべき。

インターフェース分離の原則
クライアントが使用しないメソッドへの依存を、強制すべきではない。
もやしとたこさんウィンナーを持つインターフェースから二郎ラーメンを実装してはいけない。

リスコフ置換の原則
SがTのサブタイプである場合、プログラム内のT型のオブジェクトをS型のオブジェクトに置き換えても、そのプログラムの特性は何も変わらない。
二郎ラーメンの抽象から実装された二郎ラーメンは、他の二郎ラーメンと置き換え可能であるべき。

依存性逆転の原則
・上位モジュールは、下位モジュールに依存してはならない。どちらも抽象化に依存すべきだ。
・抽象化は詳細に依存してはならない。詳細が抽象化に依存すべきだ。
ユーザーは具体の二郎ラーメンに依存してはならない。
ユーザーは抽象化された二郎ラーメンに依存し、「二郎ラーメン」の共通項を認識できる。
二郎ラーメンと二郎インスパイアラーメンは抽象に依存する。

合ってるかどうかなぁ…というところですが
もし間違えていたらこっそりDMください。