スプリングのデフォルト5 AppConfigを使用して関心を分離
(1)注目点の分離
-->誰がロミオを演じるかは俳優が決めるものではありません.
-->以前のコードはロミオ役(インタフェース)を演じたディカプリオ俳優(インプリメンテーション)がジュリエット役(インタフェース)を演じたヒロイン(インプリメンテーション)を直接招聘した
---ディカプリオ(実施体)には、演出や主人公の招聘など「多様な責任」がある
-->演出プランナーが必要で、演出を組織し、俳優を招待し、役に合った俳優を指定します.
------>演出プランナーを作り、俳優と演出プランナーの責任を明確に分ける
(2)AppConfigの作成
package springbasic.core;
import springbasic.core.discount.FixDiscountPolicy;
import springbasic.core.member.MemberService;
import springbasic.core.member.MemberServiceImpl;
import springbasic.core.member.MemoryMemberRepository;
import springbasic.core.order.OrderService;
import springbasic.core.order.OrderServiceImpl;
public class AppConfig {
//생성자주입
public MemberService memberService(){
return new MemberServiceImpl(new MemoryMemberRepository());
}
public OrderService orderService(){
return new OrderServiceImpl(new MemoryMemberRepository(), new FixDiscountPolicy());
}
}
-MemberServiceImpl
-MemoryMemberRepository
-OrderServiceImpl
-FixDiscountPolicy
-MemberServiceImpl -> MemoryMemberRepository
-OrderServiceImpl -> MemoryMemberRepository, FixDiscountPolicy
MemberServiceImpl.JAva-コンストラクション関数注入
->MemberServiceImplはMemoryMemberRepositoryに依存しなくなりました.
-->MemberRepositoryのみに依存します.
-->MemberServiceImplの場合、ジェネレータはどのインプリメンテーションオブジェクトがインポートされるか分からない(注入)
-->MemberServiceImplの作成者によって注入されたインプリメンテーションオブジェクトはAppConfigによって決定されます.
-->MemberServiceImplは、依存関係の悩みをAppConfigに任せ、実行に専念します.
依存性を注入!「外部から依存関係を注入するように」
OrderServiceImpl.JAva-コンストラクション関数注入
->OrderServiceImpl FixDiscountPolicyに依存しなくなりました.
-->DiscountRepositoryのみに依存します.
-->OrderServiceImplの観点から、作成者はどのインプリメンテーションオブジェクトがインポートされるか分からない(注入)
-->OrderServiceImplジェネレータによって注入されるインプリメンテーションオブジェクトは、AppConfigによって決定されます.
-->OrderServiceImpl依存関係に関する悩みはAppConfigに任せられ、実行のみに注目されます.
(3)AppConfig反射の修正
(4)整理
(5)AppConfig再包装
前AppConfigを尊敬します.java
尊重されたAppConfigを加えます.java
->MemoryMemberRepository()一部を変更するだけで
->アプリケーション全体の構成をすばやく理解します.
(6)新しい構造と割引ポリシーの採用
->AppConfig.Javaを置き換えるだけです.
->受注サービスImplなどの使用分野のコード(
**(7)5項目の対象設計原則を採用することを確定する
**
1、SRP単一責任原則:一つの等級は一つの責任しか引き受けられない.
2.DIP依存関係逆転の原則:プログラマは「抽象化に依存して具体化に依存することはできない」とし,依存性注入はこの原則に従う方法の一つである.
->クライアントは抽象化と実装に依存します.
3.OCP:ソフトウェア要素は拡張時に開いていますが、変更時には閉じている必要があります.
Reference
この問題について(スプリングのデフォルト5 AppConfigを使用して関心を分離), 我々は、より多くの情報をここで見つけました https://velog.io/@hadoyaji/스프링-강의-속성-정리5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol