[TIL]221122 - Grasp 패턴 이용한 객체 설계 예제(2), 가시성 설계, 설계를 코드로 매핑(1)

Jimin·2022년 11월 23일
0

Grasp 패턴 이용한 객체 설계 예제(2)

DB로부터 ProductionDescription 조회

  • 실제로는 필요할 때마다 로드가 됨

endSale 설계

판매 총액의 계산

  • Expert를 찾기 위한 과정
    • 책임: 판매 총액을 아는 것은 누가 책임져야 하는가?
    • 필요한 정보 요약:
      • 판매 합계(total)는 모든 판매 품목의 소계(subtotal) 합계
      • 판매 품목 소계 := 품목 수량 * 제품 가격
    • 이 책임을 수행하기 위해 필요한 정보와 이 정보를 알고 있는 클래스를 나열함

Sale.getTotal 설계

makePayment의 설계

payment의 생성

  • by Creator 후보는 register 과 sale
    • register -> low coupling and high cohesion
    • sale -> coupling 증가
  • 대체 설계 선택이 있는 경우
  • 향후 변경 가능성이 있는 경우 응집력, 결합성 및 안정성이 우수한 대안을 선택

판매 로그 기록

  • by Information Expert 후보는 sale과 salesLedger
  • domain model에 salesLedger를 추가

잔액 계산

  • 영수증 출력하기 위해 필요함
    • Bal = pmt.amount(받은 돈) - s.total;
  • by Informaition Expert 후보로 payment와 sale
    • payment는 sale을 알지 못합
    • sale이 payment를 만들었기 때문에 payment를 알고 있음

Iteration 1에서의 최종 NextGen DCD

UI 객체와 도메인 객체의 연결

UI 계층이 도메인 계층의 객체에 대한 가시성을 얻는 방법

  • 초기화 객체
    • UI와 도메인 객체를 모두 생성함
    • 도메인 객체를 UI에 전달함
  • UI 개체는 도메인 개체 생성을 담당하는 factory object와 같이 잘 알려진 소스에서 도메인 객체를 검색함
    • 자바 코드 예제
      1. swing
        • 내부 속성에 register를 담아 놓고 사용
      2. web -> stateless
        • 도메인 객체를 다음 동작에서 알 수 없음
          • request마다 register 얻어서 사용함
            -> 복잡하면 factory

초기화와 Start Up 유즈케이스

  • 초기화 설계 시점
    • 초기화에 대한 설계는 나중에!

초기 도메인 객체의 선택

  • 초기 도메인 객체로 선택
    • 도메인 객체의 포함 또는 집계 계층 구조의 루트 또는 그 근처에 있는 클래스

register과 같은 facade 컨트롤러 또는 store와 같은 대부분의 다른 개체를 포함하는 것으로 간주되는 다른 객체

Store.create의 설계

  • 이전 설계 작업의 요구에서 파생
    • 지금까지 만들었던 Interation Diagram에서 필요했던 가정은 무엇인가? Class Diagram에서 찾아보자
  • 초기화 작업 목록
    1. Store, Register, ProductCatalog 및 ProductDescriptions를 생성
    1. ProductCatalog를 ProductDescriptions와 연결 (연관관계)
    2. Store를 ProductCatalog와 연결 (연관관계)
    3. Store를 Register와 연결 (연관관계)
    4. Register를 ProductCatalog와 연결 (연관관계)


가시성 설계

객체 간의 가시성

  • 객체에 메시지를 보내려면 메시지를 받는 수신 객체를 볼 수 있어야 함
    • 즉 수신 객체에 대한 참조나 포인터가 필요함

가시성이란?

  • Scope에 관련된 이슈

  • 동기

    • 객체 A가 객체 B에 메시지를 보내려면 B가 A에게 보여야 함
  • 4가지 가시성

    1. Attribute visibility: B is an attribute of A. (B가 A에 연관)
    2. Parameter visibility: B is a parameter of a method of A. (B가 A의 파라미터)
    3. Local visibility B is a local object in a method of A. (B가 A의 메소드 내의 지역 객체)
    4. Global visibility B is in some way globally visible. (B가 전역 변수)

속성 가시성

  • 속성으로 정의
  • 영속적 가시성
  • 가장 일반적임

    객체가 살아있을 때만

매개변수 가시성

  • 매개변수로 전달
  • 상대적으로 일시적인 가시성
  • 자주 발생하는 가시성

    메서드가 호출되는 동안

지역 가시성

  • 지역 객체로 선언
  • 일시적 가시성

전역 가시성

  • 객체를 전역 변수에 할당
  • c++가능, Java 불가능
  • Java에서는 Singleton 패턴 사용

설계를 코드로 매핑하기

프로그래밍과 반속적이고 진화적인 개발

설계 완료 -> class diagram & interaction diagram

  • 설계와 프로그래밍이 동시에 진행

  • 모든 산출물들은 서로 영향을 주며 반복적으로 발전해 나가는 형태

  • 구현은 상대적으로 기계적인 과정

  • 설계가 불완전한 초기 단계 -> 설계 시 어느 정도 대응방안을 계획할 필요가 있음

설계를 코드로 매핑

  • 구현
    • Class Diagram으로 부터 클래스와 인터페이스 정의
    • Interaction Diagram으로 부터 메소드 정의

DCD로부터 클래스 정의 생성

  • 메소드 프로토타입과 속성을 가진 클래스 정의

인터렉션 다이어그램으로부터 메소드 생성

예제: 클래스 다이어그램에서 클래스 정의 (다시 확인)

0개의 댓글