SOLID原則について学習しましたのでアプトプットもかねて載せます。
SOLID原則とは
オブジェクト指向プログラミングにおいて、柔軟性、保守性の高いソフトウェアを設計するための5つの原則の頭文字をとったマクロニム(略語)です。
5つの原則
1 単一責任の原則
2 オープンクローズドの原則
3 リスコフの置換原則
4 インターフェース分離の原則
5 依存性逆転の原則
↑の5つの原則を具体的にコードを交えて説明します。
今回は1 単一責任の原則について記述します。
1 単一責任の原則(SPR)
単一責任の原則はクラスやモジュールが一つの責任を持つべき、という原則です。これにより、クラスが特定の機能や役割に集中し、変更や修正が必要となったときに、その責任範囲のみが修正できるようになります。これにより、コードの理解やメンテナンスが楽になります。
悪い例
class Animal
{
public function createAnimal($name, $species, $age)
{
// 動物をデータベースに保存する処理
}
public function displayAnimalInformation($animalId)
{
// 動物の情報を取得して表示する処理
}
public function feedAnimal($animalId)
{
// 動物にエサを与える処理
}
public function updateAnimal($animalId, $name, $species, $age)
{
// 動物の情報を更新する処理
}
public function deleteAnimal($animalId)
{
// 動物の情報を削除する処理
}
}
SPR化したコード↓
class Animal
{
public function createAnimal($name, $species, $age)
{
// 動物をデータベースに保存する処理
}
public function updateAnimal($animalId, $name, $species, $age)
{
// 動物の情報を更新する処理
}
public function deleteAnimal($animalId)
{
// 動物の情報を削除する処理
}
}
class AnimalInformation
{
public function displayAnimalInformation($animalId)
{
// 動物の情報を取得して表示する処理
}
}
class AnimalFeeding
{
public function feedAnimal($animalId)
{
// 動物にエサを与える処理
}
}
改善後の例では、Animalクラスが動物の作成、更新、削除といった動物に関連する情報を処理する責任を持ちます。AnimalInformationクラスは動物の情報を取得して表示する責任を持ち、AnimalFeedingクラスは動物にエサを与える責任を持っています。これにより、各クラスはそれぞれ特定の責任に集中し、クラスの理解と変更が容易になります。
簡単に単一責任の原則をまとめるとクラスの中でコードが増えた場合に他のクラスに分散させるイメージです。
↓
しかし、ここである不安が私はありました。
↓
しかし、ファイルが(クラス)が増えることによって処理が重くなったり、サーバー側の負担が増えるんじゃないですか?
結論:リソースの消費やサーバー側の負担はそれほどありません
1 メモリの消費
クラス数が増えることによってメモリの読み込まれるファイルが増えます。しかし、現代のコンピューターのメモリ容量が大きいため、ほとんど変わらない。またファイルがインスタンス化された時点でのみメモリに読み込まれるため、アプリのメモリ使用量はそれほど変わらない。
2 ディスクの使用量
クラスが増えるとアプリのディスク上のファイル数も増えます。しかし、一般的にソースファイルは非常に小さいファイルなのでアプリ全体のディスク使用量に与える影響はほとんどない。
3 ビルド時間
クラスが増えるとビルド時間がわずかに増加します。ただし、ビルドツールやキャッシュの効率化によってこの増加は最小限に抑えられる。
ですのでクラス数が増えることによって処理が重くなったりすることはほとんどありません。
ですので私は積極的に使っていきたいと思います。
以上になります。ありがとうございました。