DDD - 에릭 에반스, (11장 분석 패턴의 적용)

2024. 6. 29. 12:57· 도서
목차
  1. 분석 패턴이란?
  2. 분석 패턴의 중요성
  3. 분석 패턴의 예제
  4.  
  5. 분석 패턴의 적용
반응형

분석 패턴이란?

  • 분석 패턴은 특정 도메인 문제를 해결하기 위해 반복적으로 사용할 수 있는 설계 솔루션
  • 이러한 패턴은 도메인 전문가와 개발자가 복잡한 문제를 이해하고 해결하는 데 도움을 준다
  • 도메인 모델의 일관성을 유지하고, 복잡한 문제를 단순화하며, 재사용 가능한 설계를 제공하는 것이 목적이다

분석 패턴의 중요성

  • 재사용성: 분석 패턴은 검증된 설계 솔루션을 제공하여, 유사한 문제를 해결할 때 재사용할 수 있다. 이는 개발 시간을 단축하고, 코드의 일관성을 높일 수 있다.
  • 문서화: 분석 패턴은 도메인 모델의 구조와 동작을 명확하게 문서화한다. 이는 도메인 전문가와 개발자가 모델을 이해하고, 협력하는 데 도움을 준다.
  • 설계 품질 향상: 검증된 설계 솔루션을 사용함으로써, 도메인 모델의 설계 품질을 향상시킬 수 있다. 이는 유지보수성과 확장성을 높일 수 있다.

분석 패턴의 예제

  • 책임 연쇄 패턴 (Chain of Responsibility): 책임 연쇄 패턴은 요청을 처리할 객체의 연쇄를 만들어, 각 객체가 순차적으로 요청을 처리하거나 다음 객체에 전달하는 방식이다. 이는 유연하고 확장 가능한 요청 처리 구조를 만든다.
public abstract class Approver {
    protected Approver nextApprover;

    public void setNextApprover(Approver nextApprover) {
        this.nextApprover = nextApprover;
    }

    public void processRequest(PurchaseRequest request) {
        if (canApprove(request)) {
            approve(request);
        } else if (nextApprover != null) {
            nextApprover.processRequest(request);
        }
    }

    protected abstract boolean canApprove(PurchaseRequest request);
    protected abstract void approve(PurchaseRequest request);
}

public class Manager extends Approver {
    @Override
    protected boolean canApprove(PurchaseRequest request) {
        return request.getAmount().compareTo(new BigDecimal("1000")) < 0;
    }

    @Override
    protected void approve(PurchaseRequest request) {
        System.out.println("Manager approved request #" + request.getId());
    }
}

public class Director extends Approver {
    @Override
    protected boolean canApprove(PurchaseRequest request) {
        return request.getAmount().compareTo(new BigDecimal("10000")) < 0;
    }

    @Override
    protected void approve(PurchaseRequest request) {
        System.out.println("Director approved request #" + request.getId());
    }
}
  • 상태 패턴 (State Pattern): 상태 패턴은 객체의 상태에 따라 행동이 달라지는 경우에 사용한다. 상태를 객체로 만들어, 상태 변경을 통해 객체의 행동을 동적으로 변경할 수 있다.
public interface OrderState {
    void next(Order order);
    void prev(Order order);
    void printStatus();
}

public class NewOrderState implements OrderState {
    public void next(Order order) {
        order.setState(new ShippedOrderState());
    }

    public void prev(Order order) {
        System.out.println("The order is in its root state.");
    }

    public void printStatus() {
        System.out.println("Order is new.");
    }
}

public class ShippedOrderState implements OrderState {
    public void next(Order order) {
        order.setState(new DeliveredOrderState());
    }

    public void prev(Order order) {
        order.setState(new NewOrderState());
    }

    public void printStatus() {
        System.out.println("Order is shipped.");
    }
}

public class DeliveredOrderState implements OrderState {
    public void next(Order order) {
        System.out.println("The order is already delivered.");
    }

    public void prev(Order order) {
        order.setState(new ShippedOrderState());
    }

    public void printStatus() {
        System.out.println("Order is delivered.");
    }
}

public class Order {
    private OrderState state = new NewOrderState();

    public void setState(OrderState state) {
        this.state = state;
    }

    public void nextState() {
        state.next(this);
    }

    public void previousState() {
        state.prev(this);
    }

    public void printStatus() {
        state.printStatus();
    }
}
  • 전략 패턴 (Strategy Pattern): 전략 패턴은 알고리즘을 캡슐화하여, 클라이언트가 독립적으로 알고리즘을 선택하고 변경할 수 있도록 한다. 이는 다양한 알고리즘을 유연하게 적용할 수 있게 한다.
public interface PaymentStrategy {
    void pay(BigDecimal amount);
}

public class CreditCardPayment implements PaymentStrategy {
    public void pay(BigDecimal amount) {
        System.out.println("Paid " + amount + " using Credit Card.");
    }
}

public class PayPalPayment implements PaymentStrategy {
    public void pay(BigDecimal amount) {
        System.out.println("Paid " + amount + " using PayPal.");
    }
}

public class Order {
    private PaymentStrategy paymentStrategy;

    public Order(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void processOrder(BigDecimal amount) {
        paymentStrategy.pay(amount);
    }
}

 

분석 패턴의 적용

  • 문제 식별: 도메인에서 반복적으로 발생하는 문제를 식별한다. 이는 도메인 전문가와 협력하여 문제를 명확히 정의한다.
  • 적절한 패턴 선택: 식별된 문제에 적합한 분석 패턴을 선택한다. 패턴의 특성과 장점을 고려하여 선택한다.
  • 패턴 적용: 선택한 패턴을 도메인 모델에 적용한다. 이는 패턴의 구조와 동작을 도메인 모델에 맞게 구현하는 과정
  • 검증 및 개선: 패턴이 도메인 문제를 해결하는지 검증하고, 필요한 경우 개선한다. 이는 지속적인 피드백과 개선을 통해 이루어진다.
반응형
LIST

'도서' 카테고리의 다른 글

DDD - 에릭 에반스, (14장 모델의 무결성 유지)  (0) 2024.06.29
DDD - 에릭 에반스, (11장 모델과 디자인 패턴의 연결)  (0) 2024.06.29
DDD - 에릭 에반스, (10장 유연한 설계)  (0) 2024.06.29
DDD - 에릭 에반스, (6장 도메인 객체 생명주기)  (0) 2024.06.29
DDD - 에릭 에반스, (5장 소프트웨어에서 표현되는 모델)  (0) 2024.06.29
  1. 분석 패턴이란?
  2. 분석 패턴의 중요성
  3. 분석 패턴의 예제
  4.  
  5. 분석 패턴의 적용
'도서' 카테고리의 다른 글
  • DDD - 에릭 에반스, (14장 모델의 무결성 유지)
  • DDD - 에릭 에반스, (11장 모델과 디자인 패턴의 연결)
  • DDD - 에릭 에반스, (10장 유연한 설계)
  • DDD - 에릭 에반스, (6장 도메인 객체 생명주기)
iron_jin
iron_jin
배운 것에 대한 내 생각을 가지고 정리하자
學而不思則罔(학이불사즉망)배운 것에 대한 내 생각을 가지고 정리하자
iron_jin
學而不思則罔(학이불사즉망)
iron_jin
전체
오늘
어제
  • 전체 (163)
    • 도서 (10)
    • 생각 정리 (0)
    • 후기 모음 (14)
    • 언어 (20)
      • css (1)
      • java (9)
      • Kotlin (0)
      • javascript (0)
      • Solidity (3)
      • Python (3)
      • GO (3)
      • C++ (1)
    • Spring Framework (32)
      • spring (16)
      • JPA (6)
      • Error (4)
      • Settings (4)
    • 알고리즘 (62)
      • 이론 (0)
      • 연습문제 (58)
    • 인프라 (6)
      • 클라우드 (1)
      • 도커 (0)
      • AWS (4)
      • Elastic Search (0)
    • 쿠버네티스 (3)
      • 이론 (0)
      • 실습 (2)
      • 트러블슈팅 (1)
    • Nginx (2)
    • CS (4)
      • 서버 (0)
      • 리눅스 (2)
      • 네트워크 (0)
      • OAuth (2)
    • 형상관리 (3)
      • GIT (3)
    • Open API (3)
      • 카카오 API (1)
      • QGIS (2)
    • 보안 (0)
      • 알고리즘 (0)
    • 공통 (1)
      • 성능 관리 도구 (1)
    • Database (2)
      • MySQL (1)
      • Redis (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘
  • 백준
  • 스프링
  • 2019 kakao
  • 항해99
  • SpringBoot
  • 도메인 주도 개발
  • JPA
  • spring boot
  • 코딩테스트
  • 스프링 부트
  • 2018 카카오 블라인드
  • Java
  • 카카오 겨울 인턴십
  • 2019 카카오
  • AWS
  • ddd
  • Hibernate
  • Python
  • 항해플러스
  • 2020 kakao
  • 2018 kakao
  • 자바
  • 2020 카카오 블라인드
  • MySQL
  • 2019 카카오 블라인드
  • spring
  • 에릭 에반스
  • 프로그래머스
  • 2020 카카오

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
iron_jin
DDD - 에릭 에반스, (11장 분석 패턴의 적용)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.