「Spring Core Principles」の研究ノート
ヒント:春のデザインパターンの基本原則
記事ディレクトリ
1. 7つのソフトウェアアーキテクチャ設計原則
1.オープンクローズドプリンシプルOCP
- コンテンツ:拡張可能、変更不可
- 例:クラス図を以下に示し、コースICourseインターフェースを作成し、異なるコースがインターフェースを実装するためにJavaCourseの異なるクラスを作成します。コースの値下げがある場合は、元のクラスのgetPriceメソッドを変更せず、新しいクラスを再度拡張してJavaDiscountCouseがこのクラスを継承して書き換えます価格メソッドgetPrice。このメソッドはリスコフ代入原則に違反しているため、最善の方法はメソッドgetDiscountPriceを書き換えることです。
2.依存関係の逆転の原則(DIP)
- 内容:
- プログラムは、具体的な実装ではなく、抽象インターフェースに依存します。簡単に言えば、それがために依頼することです抽象化プログラミングするのではなく、プログラミングを実現することにより、クライアントと実装モジュール間の結合を低減します、。(特定の実装に依存しないパブリックメソッドと抽象化は静的クラスであり、特定の実装に依存するパブリックメソッドと抽象化はインターフェイスクラスです)
- Springでの依存性注入は意味があります
- 例:クラス図を以下に示します。コースICourseインターフェイスを作成します。さまざまなコースがICourseインターフェイスを実装します。Tomクラスは、依存性注入(依存性注入の3つのメソッド:パラメーターの受け渡し、コンストラクター、セッターメソッド)を介してさまざまなコース実装クラスを呼び出すことができます。
3.単一責任原則(SRP)
- 内容:クラス変更の原因は1つだけです。つまり、クラスが異なる責任を担当している場合、異なる責任は異なるクラスに分割されます。
- 注:単一の原則の使用中は、実装が容易ではなく、すべてのクラスまたはメソッドが単一の関数であることを保証することはできませんが、後の操作と保守のコストを削減できるように最善を尽くす必要があります。同時に、DAOモデルでは、クラスに4つの異なるメソッド(追加、削除、および変更)がある理由。DAOの基本的な操作はこれらの4つであるため、異なるメソッドを分割する必要はありません(つまり、後の期間で変更してはならないコードは不要です)。分割)。
4.インターフェイス分離原則(ISP)
- 内容:単一の要約インターフェースの代わりに複数の専用インターフェースを使用します。つまり、クラスは、必要のないインターフェースを実装する必要はありません。
- 例:クラス図の比較を以下に示します。動物インターフェースIAnimalには、食べる、走る、飛ぶ、泳ぐの3つのインターフェースがあります。すべて共通のメソッドである食べるが、陸、海、空の3つの異なる動物は異なる移動方法を持っているため、定義できません。統合インターフェースは分割する必要があります。
5.デメテルの法則(Lod)
内容:オブジェクトは他のオブジェクト(最小知識原理(LKP)とも呼ばれます)を最小限にとどめ、見知らぬ人ではなく友達とのみ通信することを強調する必要があります。フレンドは、メンバー変数、メソッドの入力および出力パラメーターのクラスです。例:クラス図の比較は次のとおりです。ボスボスはリリースされたコースコースの数を確認する必要があるため、TeamLeaderにカウントしてもらい、TeamLeaderが結果をボスに伝え、ボスはコースコース情報を知る必要がなく、メソッドパラメータはTeamLeaderを渡すだけでよいので、 TeamLeaderは、Courseの友人ではなく友人なので、メソッド内にCourseクラスを導入しないでください。TeamLeaderのメソッドパラメータにはコースが含まれているため、コースの友達なので、コース情報を作成してTeamLeaderに配置する必要があります。最初の方法は、Bossでコース情報を作成し、それをTeamLeaderに渡すことです。この方法は、Dimitの原則に準拠していません。
6.リスコウ代替原則(LSP)
-
内容:
- 継承の利点:
- コードの再利用を改善し、サブクラスには親クラスのメソッドとプロパティがあります。
- コードのスケーラビリティを改善します。サブクラスは親クラスに似ていますが、親クラスとは異なり、自己の特性を保持できます。
- 継承の欠点:
- 侵入性:継承が親クラスのすべてのメソッドとプロパティを持たなければならない限り、継承は侵入的です。
- 十分な柔軟性がない:サブクラスはある程度制限され、コードの柔軟性が低下します。
- 高い結合:結合の増加、親クラスの定数、変数、またはメソッドが変更されると、サブクラスの変更を考慮する必要があるため、親クラスが変更されると、非常に悪い結果が生じる可能性があり、多くのコードをリファクタリングする必要があります。
- 継承の利点:
-
原則:継承と再利用の基礎、派生クラスが基本クラスを置き換えることができる場合のみ、関数は影響を受けません。つまり、基本クラスはサブクラスへの変更の影響を受けず、基本クラスは本当に再利用できます。
-
特定のメソッド(サブクラスが親クラスのコードの結果を置き換えることを確実にするため):
- サブクラスは、親クラスの抽象メソッドを実装する必要がありますが、親クラスの非抽象(実装)メソッドをオーバーライドしてはなりません。
- 独自のメソッドをサブクラスに追加できます。
-
サブクラスがスーパークラスメソッドをオーバーライドすると、メソッドの前提条件(つまり、メソッドの仮パラメーター)がスーパークラスメソッドの入力パラメーターよりも緩和されます。
-
子クラスが親メソッドをオーバーライドするか、親クラスの抽象メソッドを実装する場合、** メソッドの事後条件(つまり、メソッドの戻り値)は親クラス**よりも厳密です。
7.コンポジット/集約再利用原則(CARP)
内容:継承の代わりにオブジェクト構成(has-a)/集約(contains-a)を使用して、クラス間の結合を減らしてみてください。