General Responsibility Assignment Software Patterns

일반 책임 할당 소프트웨어 패턴

객체가 가져야 하는 책임의 패턴을 정리

Information Expert ( 정보 전문가 )

객체가 역할을 수행할 때 필요한 정보를 가지고 있도록 한다.

Creator ( 생성자 )

컨텍스트를 알고있는 객체가 인스턴스를 생성하도록 한다.

Problem: 누가 A란 객체를 생성 해야하는가? Solution: 다음 중 하나가 참인 경우 클래스 B에 객체 A를 생성할 책임을 할당합니다.

  • B는 A를 포함.
  • B가 A를 기록.
  • B가 A를 사용.
  • B가 A를 초기화 할 수 있는 데이터를 가짐.

Controller ( 사용자의 요청 처리용 클래스 )

Low Coupling ( 약한 결합도 )

High Cohesion ( 강한 응집도 )

Indirection ( 직접 참조를 피하라 )

Polymorphism ( 다양성 )

Pure Fabrication ( 유틸 클래스 )

Information Expert 패턴을 적용했더니 Low Coupling과 High Cohesion의 원칙이 깨어진다면, 기능적인 역할을 별도로 한 곳으로 모으자.

Protected Variations

변경될 여지가 있는 곳에 안정된 인터페이스를 정의해서 사용하자.


    @DisplayName("2명이 최대 정원인 유료 강의는 최대 수강 인원을 초과할 수 없습니다.")
    @Test
    void CanNotSignUpForPaidSessionThatMaximumIs2CannotExceedMaximum() {
        long pirce = 10_000;
        PricingPolicy pricingPolicy = new PricingPolicy(PricingType.PAID_SESSION, pirce);

        assertThatNoException().isThrownBy(() -> paidSessionType.registered(pirce, 99));
        assertThatIllegalArgumentException().isThrownBy(() -> paidSessionType.registered(pirce, 100));
        assertThatIllegalArgumentException().isThrownBy(() -> paidSessionType.registered(pirce, 101));
    }

    @DisplayName("유료 강의는 결제금이 강의료와 같아야 수강신청이 가능합니다.")
    @Test
    void CanSignUpForPaidSessionIfPaymentAmountEqualToTheSessionAmount() {
        long pirce = 10_000;
        int maximumHeadCount = 2;
        PaidSessionType paidSessionType = new PaidSessionType(maximumHeadCount, pirce);

        assertThatNoException().isThrownBy(() -> paidSessionType.registered(pirce, 1));
        assertThatIllegalArgumentException().isThrownBy(() -> paidSessionType.registered(1000, 1));
    }

댓글남기기