https://s3-us-west-2.amazonaws.com/secure.notion-static.com/be8fb82a-7797-4e04-b601-594eb92292cd/_2020-07-24__4.07.13.png

DDD에서 소개하는 계층형 아키텍쳐의 일반적인 모습이다. 실무에서 많이 사용하는 일반적인 계층으로 좀 더 나누어 보면,

이 정도가 될 것 같다. 위 개념을 이용해서 웹 서비스의 전형적인 문제 하나를 같이 구현해 보자.

기능은 응용 서비스 계층 단위로 구현

class WelcomePartyService:
	def apply(self, welcome_party_id: int, user_id: int) -> None;
		pass

도메인 모델은 레파지토리 계층이 조회

class WelcomePartyService:
	def apply(self, welcome_party_id: int, user_id: int) -> None;
		welcome_party = get_welcome_party(welcome_party_id)  # added
class WelcomePartyRepository:  # added
	def get(id: int) -> WelcomeParty:
		return read_from_db(WelcomeParty, id)

class WelcomePartyService:
	def __init__(self: wp_repo: WelcomePartyRepository) -> None:  # added
		self.wp_repo = wp_repo

	def apply(self, welcome_party_id: int, user_id: int) -> None;
		welcome_party = self.wp_repo.get(welcome_party_id)  # changed

실제 핵심 기능은 도메인 모델에 구현

class WelcomeParty:  # added
	def apply(self, user_id: int) -> None:
		self.applyers.append(user_id)