SOLID開発者になる

Dec 24 2022
SOLID ソフトウェア エンジニアリングの原則に従うことによって
堅実と言われるのは褒め言葉です。この言葉には、信頼性と立派さの肯定的な概念が含まれています。

堅実と言われるのは褒め言葉です。この言葉には、信頼性と立派さの肯定的な概念が含まれています。みんなで一つになることを目指すべきです。

https://www.collinsdictionary.com/dictionary/english/solid (スクリーンショット)

あなたがソフトウェア エンジニアであるか、なりたいと考えている場合は、道しるべとなる一連の SOLID 原則があるため、幸運です。

SOLID は、ソフトウェア エンジニアリング プロフェッショナルの頭字語です。次の略です。

  • 単一責任の原則
  • オープンクローズド原則
  • リスコフの置換原理
  • インターフェイス分離の原則
  • 依存性逆転の原則

これらの原則をさらに詳しく見てみましょう。

単一の責任

各クラスは、単一の責任を持つ必要があります。

は、メールの送信や注文ステータスの更新EmailServiceではなく、メールの送信だけに関心を持つ必要があります。

クラスは、他の種類の動力付き車両ではなく、自動車のみに関するものであるCarべきです。電気自動車を説明する必要がある場合は、電気自動車やガソリン車の特性ElectricCarでオーバーロードするよりも、 のようなサブクラスが適切です。Car

開閉原理

モジュールは拡張用に開いている必要がありますが、変更用には閉じている必要があります

は、送信したばかりの電子メールに再呼び出し機能を追加EmailServiceすることで拡張できます。RecallableEmailService

EmailService とその関連付け

ElectricCar、 の内部を変更せずに電気機能を追加しますCar

リスコフ置換

サブクラスは、その基本クラスを代用できる必要があります

オブジェクト指向設計のコンテキストでは、基本クラスのインスタンスを受け入れるクラスまたはメソッドは、そのサブクラスの任意のインスタンスを取得できる必要があります。

は、OrderServiceインスタンスEmailServiceの実際のクラスがEmailServiceそれ自体またはRecallableEmailService

は、の任意UrbanTripPlannerのインスタンスを使用してCar、ルートが電気自動車またはガソリン車のどちらを表しているかを知らなくてもルートを決定できる必要があります。

インターフェイスの分離

多くのクライアント固有のインターフェースは、1 つの汎用インターフェースよりも優れています

するOrderService必要はありませんrecallEmail(...)EmailServiceしたがって、メールの送信のみに依存し、依存しませんRecallableEmailService

同様に、はからのメソッドをUrbanTripPlanner必要としません。によって提供されるインターフェースのみに依存します。recharge(...)EletricCarCar

車とその関連

依存関係の逆転

抽象化に依存します。コンクリートに依存しないでください。

手続き依存メカニズムは上から始まり、徐々に拡大し、具体的な実装の詳細に依存します。

オブジェクト指向プログラミングでは、依存関係がになります。依存関係の大部分は、抽象化に依存する必要があります。そして、実装が存在するところでは、抽象化との関係が逆転します。実装は、直接依存するのではなく、抽象化に依存するようになりました。

出典: Uncle Bob's Design Principles and Design Patterns

は、IMAP や POP の実装ではなく、提供されるOrderServiceインターフェイスに依存します。EmailService

は、Tesla または Toyota の実装ではなく、によって提供されるUrbanTripPlannerインターフェイスに依存します。Car

結論

SOLID の頭字語の起源を調べ、それぞれ 2 つのオブジェクト指向設計のユース ケースを使用してそれぞれを詳細に調べました。

これらの原則のいくつかは、良い慣行であるため、知らず知らずのうちに従ったことがあるかもしれません。私の意見では、カプセル化は開閉原理に従っています。

それが物事のあり方であるため、あなたもそれらのいくつかを適用したかもしれません. 構文的には、ElectricCarオブジェクトは常にCarパラメーターを渡すことができるため、リスコフの置換原則に従います。依存性注入を使用したことがある場合は、依存性逆転の原則に従っていることになります。

他の原則については、少し考える必要があります。単一責任の原則には、メソッド/クラス/モジュールをクリーンで無駄のない状態に保つための優れた OO モデルが必要です。インターフェース分離の原則に従いながら、分離をどの程度深くするべきかを判断するには、適切な判断が必要になる場合があります。

参考文献

  • デザインの原則とデザイン パターンに関する論文
  • OOD記事の原則
  • クリーン アーキテクチャ: ソフトウェアの構造と設計に関するクラフトマンズ ガイド
  • https://en.wikipedia.org/wiki/SOLID

このシリーズの他の記事:

ありがとうございました。