2012-02-02 2 views
0

У меня есть задачи разных типов, хранящиеся в БД. Мне нужно получить задания из БД и запустить каждую задачу в соответствующей службе (например, AService обрабатывает объекты ATask, BService обрабатывает объекты BTask и т. Д.). Существует также класс TaskController, который координирует выполнение задач.Весенний контроллер и дизайн услуг

Что лучше дизайн -

1.Have контроллера выборки всех активных задач и отправить каждую задачу в соответствующую службу.

2.Убедитесь, что каждая услуга забирает и выполняет все задачи, имеющие к ней отношение (в этом случае контроллеру придется перебирать все определенные службы и активировать их).

ответ

1

Я бы выбрал решение 1. за исключением того, что промежуточная служба должна быть создана для обработки того, что вы хотите поместить в контроллер - загрузки и диспетчеризации задач.

Также я чувствую запах большого жира switch или каскадом if с, возможно, с instanceof. Я думаю, вы можете воспользоваться chain of responsibility pattern - спросите первую услугу, может ли она справиться с задачей. Если это невозможно - перейдите ко второму и так далее.

Другим подходом будет visitor, если каждая задача представляет собой отдельный подкласс общего класса.

+0

Я намеренно оставил часть отправки из этого вопроса, я думаю, что это другая проблема (в любом случае я не буду использовать переключатели/ifs). – Alex

Смежные вопросы