Springコア原理-基本編#1
3911 ワード
このブログ記事は、金英漢講師のSpringコア原理基本編のチュートリアルを参考にした.
歴史
抽象、カプセル化、継承、多形性
ロール/実装ロール:インタフェース、実装:インタフェースを実装するオブジェクト
自動車キャラクター<-K 3(実施)
自動車キャラクター<-アバンド(実施)
クライアント(運転手)に影響を与えることなく、新しい機能を提供できます.
役割と実装によって世界を区別する
役割をインプリメンテーションから分離すると、変更可能な代替が生成されます.=柔軟で容易な変更
内部構造を知らなくてもいいです.
お客様は車の運転方法を知っていればいいです.(内部構造を知る必要はありません)
したがって、キャラクタ(インタフェース)を作成した後、そのキャラクタを実行するインプリメンテーションオブジェクトを作成します.
重要なのは、インタフェースが変わらないように設計されなければならないことです.
クライアント=要求の送信元
サーバ=レスポンス
SRP:単一責任原則
OCP:オープン/クローズの原則
LSP:リスコフ交換の原則
ISP:インターフェース分離の原則
DIP:依存逆転の原則
1階級には1つの責任しかない.変更の場合、波及が小さい場合、従う法則は良い:
拡張はオープンですが、境界は閉鎖されなければなりません.最も重要
多形性の利用
自動車の例を考えます
新しいインプリメンテーションインタフェースクラスの作成と実装
-->誰かが組み立てる必要があります:スプリング容器で完成します.
プログラム内のオブジェクトは、プログラムの正確性を破壊することなく、サブタイプのインスタンスに変換できる必要があります.
すべてのインタフェース規則を使用する必要があります
自動車を例にとると、アクセルを作ると、アクセルを押すと前に進みます.アクセルを押して上に進むとLSP違反になります
複数の特定のクライアントインタフェースは、1つの汎用インタフェースよりも優れています.自動車を例にとると、自動車を丸めるよりも、整備工、運転手インターフェースを別々に使うほうが明確で、代替の可能性が高い.
抽象に頼るには,具体化に頼るわけにはいかない.
クライアント・コードは実装クラスではなく、インタフェースのみに注目する必要があります.
運転手は車の役割しか知らないはずだ.
依存
SPA->単一責任 オープン/クローズ->拡張オープン、変更クローズ Liskovディスプレイスメント->ディスプレイスメント:実際にインタフェース(実装)を実装する際に勝手にできません.置き換えの時は思うようにできない. インタフェースの分離:複数の分離がより良い 依存バージョン:依存性逆転:抽象に依存するのは正しいが、関係が逆転し、具体化に依存できない.依存具体化の場合,抽象依存性を逆転させる方法は抽象化に依存する. 上記の例と似ているが、猫は具体的な平凡な動作という構造体に依存する.具体的な等級は変わりやすい.
この過程で,依存性を逆転させる方法は,依存するクラスをあまり具体的でないクラスとすることである.
https://o-o-wl.tistory.com/30
多形性だけではOCP、DIPは守れない.
スプリングは、依存注入(DI)+DI容器と呼ばれる技術であり、多形性+OCP、DIPをサポートする. OCP、DIPの原則に従って開発を行い、最終的にスプリングフレーム を作成した.
理想的な方法は、すべての設計にインタフェースを提供することです.
インタフェースは抽象化されたコストを生み出す.
(したがって、すべてのインプリメンテーションはインタフェースによってxを実現する必要がある)
そのため、インタフェースは拡張機能が必要な場合にのみ使用することをお勧めします.
歴史
初期、Java側はEJB技術を発表した.
理論はいいですが、高いです.(サーバー1台あたり数千万ウォン)
でも私は良いことを知っていますが、犬は難しいですね.甚だしきに至っては遅い.
だからポジョに戻るって言う人もいました
Plain Old Java Objectは、簡単に言えば、POJOは用語であり、字面の意味で解釈すれば、Java EEなどの重量フレームワークを使用し、そのフレームワークに属する「重い」オブジェクトの作成に反対する古い簡単なJavaオブジェクトである.
このとき、かつてEJBdeveloperの2人の開発者が、それぞれオープンソースでspring、hibernateを作成しました.
JAva側は元使用のORMを捨て、hibernateプロデューサーを雇ってJPAを作成した.
現在のJPAの80%以上がHibernate実装体である.
春という名前の意味は伝統を超えた冬で、新しい季節の始まりです.
コアコンセプト?
Javaベースのオブジェクト向けの最も強力な機能のフレームワーク
オブジェクト向け
Javaベースのオブジェクト向けの最も強力な機能のフレームワーク
オブジェクト向け
たけいせい
ロール/実装
自動車キャラクター<-K 3(実施)
自動車キャラクター<-アバンド(実施)
クライアント(運転手)に影響を与えることなく、新しい機能を提供できます.
役割と実装によって世界を区別する
役割をインプリメンテーションから分離すると、変更可能な代替が生成されます.=柔軟で容易な変更
内部構造を知らなくてもいいです.
お客様は車の運転方法を知っていればいいです.(内部構造を知る必要はありません)
したがって、キャラクタ(インタフェース)を作成した後、そのキャラクタを実行するインプリメンテーションオブジェクトを作成します.
重要なのは、インタフェースが変わらないように設計されなければならないことです.
Client - Server
クライアント=要求の送信元
サーバ=レスポンス
良好なオブジェクト向け設計五原則(SOLID)
SRP:単一責任原則
OCP:オープン/クローズの原則
LSP:リスコフ交換の原則
ISP:インターフェース分離の原則
DIP:依存逆転の原則
1.SRP
1階級には1つの責任しかない.
2. OCP
拡張はオープンですが、境界は閉鎖されなければなりません.最も重要
多形性の利用
自動車の例を考えます
新しいインプリメンテーションインタフェースクラスの作成と実装
質問する
A a = new B
-->
A a = new C
下図のように乗り換えるには、コードを変更する必要があります.closedから違反します.-->誰かが組み立てる必要があります:スプリング容器で完成します.
3.LSP
プログラム内のオブジェクトは、プログラムの正確性を破壊することなく、サブタイプのインスタンスに変換できる必要があります.
すべてのインタフェース規則を使用する必要があります
自動車を例にとると、アクセルを作ると、アクセルを押すと前に進みます.アクセルを押して上に進むとLSP違反になります
4.ISP
複数の特定のクライアントインタフェースは、1つの汎用インタフェースよりも優れています.
5.DIP
抽象に頼るには,具体化に頼るわけにはいかない.
クライアント・コードは実装クラスではなく、インタフェースのみに注目する必要があります.
運転手は車の役割しか知らないはずだ.
A a= new B
-->Aインタフェース、そしてBインタフェース.暗記する
この過程で,依存性を逆転させる方法は,依存するクラスをあまり具体的でないクラスとすることである.
https://o-o-wl.tistory.com/30
質問する
多形性だけではOCP、DIPは守れない.
トラブルシューティング
スプリングは、依存注入(DI)+DI容器と呼ばれる技術であり、多形性+OCP、DIPをサポートする.
理想的な方法は、すべての設計にインタフェースを提供することです.
インタフェースは抽象化されたコストを生み出す.
(したがって、すべてのインプリメンテーションはインタフェースによってxを実現する必要がある)
そのため、インタフェースは拡張機能が必要な場合にのみ使用することをお勧めします.
Reference
この問題について(Springコア原理-基本編#1), 我々は、より多くの情報をここで見つけました https://velog.io/@camel-man-ims/Spring-핵심원리-기본편-1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol