Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3단계 - 기능 우선 패키지 구성하기 #512

Open
wants to merge 2 commits into
base: kwj1270
Choose a base branch
from

Conversation

kwj1270
Copy link

@kwj1270 kwj1270 commented Feb 25, 2025

개요

안녕하세요 리뷰어님, 이번 3단계 미션 리뷰 요청드립니다.

고민 포인트

패키지(모듈)과 바운디드 컨텍스트에 대한 생각

바운디드 컨텍스트는 자연스럽게 식별되는 하위 도메인에 우리가 인위적인 경계를한다고 느껴짐
흔히들 바운디드 컨텍스트를 회사내 조직(팀)의 관점으로 이야기를 하시는데(조직 개편 == 조직의 경계 구분)
따라서 이번 미션에서 페어와 동의하에 식별한 개념이 곧 우리 서비스의 바운디드 컨텍스트라 판단
따라서 패키지를 구성할 때도 (메뉴/상품/배달주문/포장주문/매장주문) 단위로 패키지 정의

Order 를 어떻게 활용할 것인가?(공통 코드로 관리 or 각 요구사항별 분리)

Order 의 경우 각 주문타입마다 정책이 다르고 프로세스도 많이 다름 => 블랙박스 구조인가? X => 같은 추상화 레벨이 아님
정책이 다른데 중복을 없애기 위해 공통을 만드는 것이 맞는가? -> 정책 기준 SRP 를 위반한다 생각
따라서 중복을 제거하고자 공통으로 관리하는 것보다 서로 분리하는게 맞다고 생각함

  • Shared Kernel, OHS, ACL 모두 고려했으나 Order 는 현재 적합하지 않은 것 같음
  • 이름을 검증하는 경우 Shared Kernel 를 사용할 수 있어보임
  • 상품 메뉴를 생성하는 경우 Menu 모듈로부터 OHS 사용할 수 있어보임

패키지 설명

개인적으로도 Layered Architecture 를 좋아합니다.

제가 추구하는 방식은 각 바운디드 컨텍스트를 루트(모듈)로 설정하고
하위 레이어들을 api / application / domain / infrastructure 로 설정하고 있습니다.
여기서 infrastructure 는 domain 패키지의 인터페이스를 참조하여 DIP 형태를 지향하고자 합니다.

image

패키지 구조

├── deliveryorder/      # 배달 주문 컨텍스트
│   ├── api/
│   │   └── DeliveryOrderRestController
│   ├── application/
│   │   └── DeliveryOrderService
│   ├── domain/
│   │   ├── KitchenRiders
│   │   ├── DeliveryOrderLineItem
│   │   ├── DeliveryOrderStatus
│   │   └── DeliveryOrder  
│   └── infrastructure/
│       ├── JpaEatDeliveryOrderRepository
│	└── DefaultKitchenriders
├── eatinorder/         # 매장 주문 컨텍스트
│   ├── api/
│   │   ├── EatInOrderRestController
│   │   └── OrderTableRestController
│   ├── application/
│   │   ├── EatInOrderService  
│   │   └── RestaurantTableService
│   ├── domain/
│   │   ├── EatInOrder  
│   │   ├── EatInOrderLineItem
│   │   ├── EatInOrderStatus
│   │   ├── EatInOrderRepository
│   │   ├── RestarauntTable
│   │   └── RestarauntTableRepository
│   ├── infrastructure/
│       ├── JpaEatInOrderRepository
│       └── JpaRestarauntTableRepository
├── menu/               # 메뉴 컨텍스트
│   ├── api/
│   │   ├── MenuGroupRestController
│   │   └── MenuRestController
│   ├── application/
│   │   ├── MenuGroupService
│   │   └── MenuService
│   ├── domain/
│   │   ├── Menu
│   │   ├── MenuGroup
│   │   ├── MenuGroupRepository
│   │   ├── MenuProduct
│   │   └── MenuRepository
│   ├── infrastructure/
│   │   ├── JpaMenuGroupRepository
│       └── JpaMenuRepository
├── product/            # 상품 컨텍스트
│   ├── api/
│   │   └── ProductRestController
│   ├── application/
│   │   └── ProductService
│   ├── domain/
│   │   ├── Product
│   │   └── ProductRepository
│   ├── infrastructure/
│      └── JpaProductRepository
├── shared/             # 공유 커널(2개 이상의 컨텍스트에서 사용) 
│   ├── domain/
│   │   ├── Profanities
│   │   └── OrderType
│   └── infra/
│       └── DefaultProfanities
└── takeoutorder/      # 포장 주문 컨텍스트
   ├── api/
    │   └── TakeOutOrderRestController
    ├── application/
    │   └── TakeOutOrderService  
    ├── domain/
    │   ├── TakeOutOrderLineItem
    │   ├── TakeOutOrderStatus    
    │   └── TakeOutOrder  
    ├── infrastructure/
        └── JpaTakeOutRepository

논의 했던 내용

스크린샷 2025-02-25 오후 10 17 14 스크린샷 2025-02-25 오후 10 17 24 스크린샷 2025-02-25 오후 10 17 34

@kwj1270 kwj1270 changed the base branch from master to kwj1270 February 25, 2025 14:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant