2021.10.31 TIL
7521 ワード
金英漢スプリングコア原理プレミアム編参考内容
ex) orderService.orderItem(), orderRepository.save(itemId) ex)ログトレースロジック、トランザクション機能 テンプレートというフレームワークでは、不変の部分を集約し、変化を解決するために個別に呼び出す.(テンプレートで変化した部分はcall()メソッドを呼び出します.) 変わった部分→ex)ビジネスロジック 変わらない部分→ex)時間論理 良いデザインは変更時に確認できます. テンプレートメソッドパターン使用継承. 現在の状況では およびその継承構造 それを改善する方法は
コア機能と追加機能
핵심 기능
:当該対象が提供する固有機能부가 기능
:コアメニティ用変と不変の分離
템플릿 메서드 패턴(Tempate Method Pattern)
@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)
Reference
この問題について(2021.10.31 TIL), 我々は、より多くの情報をここで見つけました https://velog.io/@pbg0205/2021.10.31-TILテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol