SOLID — ゼロからポテトまで 5

Apr 02 2023
この記事の Dependency Inversion Principle (DIP) については、これが SOLID に関する最後の記事になります。
今日は、この記事で依存関係逆転の原則 (DIP) について説明します。 SOLID の原則について知らなくても、先輩のコード、さまざまなメディアの記事、チュートリアルから学ぶことができるため、SOLID の他人の原則についてはよく知っています。しかし、依存関係の逆転とは何か、それをどのように使用すべきか、なぜ使用すべきかを聞くことはほとんどありません。

今日は、この記事で依存関係逆転の原則 (DIP)について説明します。SOLIDの原則について知らなくても、先輩のコード、さまざまなメディアの記事、チュートリアルから学ぶことができるため、 SOLIDの他人の原則についてはよく知っています。しかし、依存関係の逆転とは何か、それをどのように使用すべきか、なぜ使用すべきかを聞くことはほとんどありません。

ところで、すでに Android 開発者として働いている場合は、依存性注入と混同しないでください。人気のあるライブラリである Dagger、Hilt、および Koin については既におなじみでしょう。この 2 つは大きく異なるため、特にインタビューで説明する場合は注意が必要です。

依存性注入は、クラスのインスタンス変数を設定するための実装手法です。依存関係の逆転は、クラスが高レベルの抽象化との直接的な関係のみを持つべきであることを推奨する一般的な設計ガイドラインです。

依存性逆転の原則 (DIP): 高レベル モジュールは低レベル モジュールに依存すべきではありません。どちらも抽象化に依存する必要があります。

簡単なコードの実装について説明します。その後、DIP について理解を深めることができます。Studentいつものように、いくつかの機能を実行するためにクラスに依存するクラスから始めましょうTeacher

class Student(private val teacher: Teacher) {
    fun askQuestion(question: String) {
        teacher.answerQuestion(question)
    }
}

DIPに準拠するようにリファクタリングして、Studentとクラスの間に抽象化を導入できますTeacher

interface QuestionAnswerer {
    fun answerQuestion(question: String)
}

class Teacher : QuestionAnswerer {
    override fun answerQuestion(question: String) {
        // answer the specified question
    }
}

class Student(private val questionAnswerer: QuestionAnswerer) {
    fun askQuestion(question: String) {
        questionAnswerer.answerQuestion(question)
    }
}

これは、クラスが具体的な実装 ( ) ではなく抽象化 ( )Studentに依存しているため、DIP に準拠しています。これにより、インターフェースを実装する任意のクラスをクラスだけでなくクラスの依存関係として使用できるため、柔軟性と拡張性が向上します。QuestionAnswererTeacherQuestionAnswererStudentTeacher

リファクタリングされたバージョンを見た後、依存関係の 反転も使用する必要がある理由を理解していただければ幸いです。DIP は、アプリケーション内のコンポーネントを分離するのに役立ち、コードをより柔軟で保守しやすく、テストしやすくすることができます。

この記事を読んでいただきありがとうございます。私の執筆が有益で示唆に富むものであったことを願っています。それまでのすべての皆さんに幸せなコーディングを。

SOLIDについての前の記事:

単一責任の原則 (SRP) :https:///arpalar-tech/solid-from-zero-to-potato-e7b5cfe8c7a1

オープン/クローズの原則 (OCP): https:///arpalar-tech/solid-from-zero-to-potato-2-5a4c17bd8ec8

リスコフ置換原理 (LSP): https:///arpalar-tech/solid-from-zero-to-potato-3-94d6f63dbbfe

インターフェイス分離の原則 (ISP):https:///arpalar-tech/solid-from-zero-to-potato-4-d1d9b42c3a78