2012-02-02 2 views
0

DB에 다른 유형의 작업이 저장되어 있습니다. DB에서 작업을 가져와 적절한 서비스에서 각 작업을 실행해야합니다 (예 : AService는 ATask 객체를 처리하고 BService는 BTask 객체를 처리합니다). 태스크 실행을 조정하는 TaskController 클래스도 있습니다. 더 나은 디자인스프링 컨트롤러 및 서비스 설계

-

컨트롤러 1.Have는 모든 활성 작업을 가져오고 해당 서비스에 각 작업을 보냅니다.

2. 각 서비스를 가져 와서 관련된 모든 작업을 실행하십시오 (이 경우 컨트롤러는 정의 된 모든 서비스를 반복하여 활성화해야합니다).

답변

1

컨트롤러 1에 넣고 싶은 작업을 처리하기 위해 중개 서비스를 작성해야한다는 점을 제외하고는 솔루션 1로 갈 것입니다. 작업로드 및 디스패치.

또한 큰 지방 switch 또는 if의 계단을 instanceof과 같이 냄새가납니다. 나는 당신이 chain of responsibility pattern의 혜택을 누릴 수 있다고 생각합니다. - 작업을 처리 할 수 ​​있는지 여부를 먼저 확인하십시오. 그럴 수 없다면 - 두 번째 등등으로 전달하십시오.

각 작업이 공통 클래스의 별도 하위 클래스 인 경우 다른 접근 방식은 visitor입니다.

+0

나는 의도적으로이 질문에서 파견 부분을 남겨 두었다. 나는 다른 문제라고 생각한다. (어쨌든 나는 스위치/if를 사용하지 않을 것이다). – Alex