Webエンジニアのメモ帳

技術的な話を中心に書いています。

SOLID原則について

オブジェクト指向プログラミングで用いられる「SOLID原則」について説明します。

1. 単一責任の原則(Single responsibility principle)

1つのクラスは1つの機能だけ持つ、という原則です。

例えば、あるクラスがGetterとSetterに加え、DBにデータを保存するメソッドを持っている時、このメソッドは別のクラスに分けましょう、というような話です。

以下のリンクはわかりやすかったです。 https://thinkit.co.jp/article/13274

2. 開放閉鎖の原則(Open–closed principle)

機能の追加がしやすく、また機能の追加によって他の部分が影響を受けにくいように設計しましょう、という原則です。

「機能を追加する際に既存のクラスに手を加えないような設計」というとわかりやすいでしょうか。

以下のリンクはわかりやすかったです。 https://shkn.hatenablog.com/entry/2019/04/07/235558

3. リスコフの置換原則(Liskov substitution principle)

クラスAが持つメソッドMは、クラスBのインスタンスを受け取って処理するとします。

ここで、クラスB'というクラスBを作ることを考えます。

このとき、クラスAのメソッドMにクラスBではなく、その子クラスであるクラスB'のインスタンスを渡しても、動くようにしないといけない、という法則です。

以下のリンクはわかりやすかったです。 https://think-on-object.blogspot.com/2011/11/liskov-substitution-principle-lsp-ok.html

4. インターフェイス分離の原則(Interface segregation principle)

インターフェースに無駄な機能を持たせない、という話です。

例えば、「生き物」というインターフェースに「飛ぶ」「泳ぐ」という2つのメソッドを持たせたら、「ダチョウ」のような小クラスを作った時に困る、というような話です。

5. 依存性逆転の原則(Dependency inversion principle)

上位のモジュールが下位のモジュールの実態ではなく抽象に依存する、つまり、サービス層はレポジトリ層のインターフェースに依存し、その実装クラスには依存しない、という原則です。