2021.10.31 TIL


金英漢スプリングコア原理プレミアム編参考内容

コア機能と追加機能

  • 핵심 기능:当該対象が提供する固有機能
  • ex) orderService.orderItem(), orderRepository.save(itemId)
  • 부가 기능:コアメニティ用
  • ex)ログトレースロジック、トランザクション機能
  • 変と不変の分離

  • 템플릿 메서드 패턴(Tempate Method Pattern)
  • テンプレートというフレームワークでは、不変の部分を集約し、変化を解決するために個別に呼び出す.(テンプレートで変化した部分はcall()メソッドを呼び出します.)
  • 変わった部分→ex)ビジネスロジック
  • 変わらない部分→ex)時間論理
  • @Slf4j
    public abstract class AbstractTemplate {
    		
    	public void execute() {
    		long startTime = System.currentTimeMills();
    				
    		//비즈니스 로직 실행
    		call(); //상속
    		//비스니스 로직 종료
    		
    		long endTime = System.currenTimeMills();
    
    		long resultTime = endTime - startTime();
    		log.info("resultTime={}", resultTime);
    	}
    
    	protected abstract void call();
    }
    
    public SubClassLogic1 extends AbstractTemplate {
    	@Override
    	protected void call() {
    		log.info("비즈니스 로직1 실행");
    	}
    }
    
    public SubClassLogic2 extends AbstractTemplate {
    	@Override
    	protected voic call() {
    		log.info("비즈니스 로직2 실행");
    	}
    }
    アプリケーションコード
    //OrderControllerV4
    
    public String request(String itemId) {
    	AbstractTempate<String> template = new AbstractTemplate<>(trace) {
    		@Override
    		protected String call() {
    			orderService.orderItem(itemId);
    			return "ok";
    		}
    	};
    
    	template.execute("orderController.request()");
    }

    良いデザインは何ですか?

  • 良いデザインは変更時に確認できます.
  • 단일 책임 원칙(SRP):ログに残っている部分をモジュール化し、業務を分離する.明確なキャラクター分離は変更に簡単に対応できます.
  • しかし,テンプレートメソッドモードにも欠点がある.

  • テンプレートメソッドパターン使用継承.상속 관계는 강한 의존 관계를 형성する.
  • 現在の状況では자식 클래스는 부모 클래스의 기능을 전혀 사용하지 않는다.この場合の使用継承は理想的な設計ではない.
  • およびその継承構造클래스가 익명 내부 클래스를 만들어야 해서 복잡
  • それを改善する方法は전략 패턴(strategy pattern)