이런 시나리오라면 쿼리가 2개 필요할 것입니다.
• findAvailableRestaurants(deliveryAddress, deliveryTime): 주어진 장소/시간으로 배달 가능한 음식점 목록을 조회합니다.
• findRestaurantMenu(id): 메뉴 항목 등 음식점 정보를 조회합니다.
둘 중 지리 검색(geosearch)이 필요한 findAvailableRestaurants()가 더 복잡한 쿼리라서 아키텍처 관점에서는 더 중요합니다. 이 쿼리의 지리 검색 컴포넌트는 배달 주소에 해당하는 곳 주변의 전체 음식점을 검색한 후, 주문을 준비/픽업할 시점에 영업 종료하는 음식점을 필터해야 합니다. 이 쿼리는 소비자가 주문을 할 때마다 실행되므로 성능 역시 중요합니다.
고수준 도메인 모델과 시스템 작업을 보면 애플리케이션이 무슨 일을 하는지 알 수 있기 때문에 아키텍처를 정의하는 데 대단히 유용합니다. 각 시스템 작업의 동작은 도메인 모델 중심으로 기술하는데, 중요한 시스템 작업은 아키텍처 측면에서도 중요한 시나리오를 나타내고 이런 시나리오 자체가 아키텍처를 기술하는 일부가 됩니다.
시스템 작업을 정의한 후에는 애플리케이션 서비스를 식별합니다. 앞서 말했지만, 서비스를 기계적으로 식별하는 방법은 없지만 다양한 분해 전략을 선택할 수는 있습니다. 어떤 전략이든 제각기 상이한 관점에서 문제점을 공략하며 자신의 용어를 사용하지만 최종 결과는 매한가지입니다. 기술 개념이 아닌 비즈니스 개념 중심으로 서비스가 구성된 아키텍처입니다.