나는 운송용 응용 프로그램을 설계하고 Clean Architecture를 사용하려고합니다. 사용자가 UI에서 버튼을 클릭 할 때마다 새 객체를 다시 인스턴스화 할 필요가 없도록 Shipment 객체의 상태를 유지할 위치를 파악하려고합니다. 여기에 흐름이 있습니다.DDD 저장소를 상태 유지할 수 있습니까?
- 사용자는 UI 이벤트를 처리하는 UI
- UI 제어기 배송 번호를 입력하여 사용 사례 인터랙 (A)의 인스턴스를 인스턴스화한다. Use Case Interactor의 생성자에 전달 된 저장소 인스턴스
- Use Case 인터랙터는 팩토리 (예 : CREATE_BY_DELIVERY)를 호출하여 Shipment 인스턴스를 인스턴스화합니다. 팩토리는 Repository를 호출하여 데이터베이스에서 데이터를 수집합니다.
- 배달 데이터가 UI
- 사용자에 채워진 것은 다음
- UI 컨트롤러의 버튼 클릭 이벤트를 처리하고 사용 사례 인터랙 a의 RATE_QUOTE 메소드를 호출하는 요금 견적 버튼을 클릭합니다. 유스 케이스 인터랙 터는 3 단계에서와 같이 선적 팩토리를 다시 호출해야합니까? 아니면 유스 인터랙 터가 3 단계에서 이미 생성 된 선적 객체의 인스턴스를 가져올 수 있습니까?
- 요금은
- UI 컨트롤러의 버튼 클릭 이벤트를 처리하고 사용 사례 인터랙 a의 PROCESS_SHIPMENT 메소드를 호출하는 과정 발송 버튼을 클릭 할 UI
- 사용자에 표시됩니다. 유스 케이스 인터랙 터는 3 단계에서와 같이 선적 팩토리를 다시 호출해야합니까? 아니면 유스 인터랙 터가 3 단계에서 이미 생성 된 선적 객체의 인스턴스를 가져올 수 있습니까?
발송물 오브젝트의 상태가 UI 컨트롤러, 사용 사례 인터랙 터 또는 저장소에서 인스턴스 변수 여야합니까? 이상적으로는 어딘가에 저장하고 싶기 때문에 사용자가 UI에서 버튼을 클릭 할 때마다 새 객체를 생성 할 필요가 없습니다.
미리 감사드립니다.
동의. 실제 * 저장소 구현에 캐싱이 포함되지 않아야 함을 추가하겠습니다. 오히려 * 데코레이터 패턴 *을 사용하여 캐싱을 포함시킵니다. 이 데코레이터는 실제 구현 (아마도 생성자 삽입)을 래핑 한 다음 캐싱을 수행합니다. 당신의 유스 케이스는 여전히'IShipmentRepository'를 필요로하지만 "래퍼"를 인스턴스화하고 저장소 인스턴스를 전달할 것이다. 이 방법으로 저장소를 깨끗하게 유지할 수 있습니다. –