
272
2
부
이벤트 기반 아키텍처
13.3
핸들러 준비: 클로저와 부분함수를 사용한 수동
DI
의존성이 있는 함수를 의존성이
이미 주입된
already
injected
나중에 호출될 수 있는 함수로 변환하는
한 가지 방법으로, 클로저
closure
나 부분함수
partial
function
를 사용해 함수와 의존성을 합성하는 방법
이 있다.
클로저나 부분함수를 사용한
DI
예제
# 추상적인 UoW 의존성이 있는 기존 할당 함수
def allocate(
cmd: commands.Allocate, uow: unit_of_work.AbstractUnitOfWork
):
line = OrderLine(cmd.orderid, cmd.sku, cmd.qty)
with uow:
...
# 실제 UoW를 준비하는 부트스트랩 스크립트
def bootstrap(..):
uow = unit_of_work.SqlAlchemyUnitOfWork()
# UoW 의존성이 클로저에 포획되어 있는 allocate 함수 버전을 준비한다.
allocate_composed = lambda cmd: allocate(cmd, uow)
# 위 코드와 같은 역할을 하는 다른 방식의 코드(스택 트레이스가 잘 드러남)
def allocate_composed(cmd):
return allocate(cmd, ...