Весенний контроллер и дизайн услуг

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

Какой лучший дизайн -

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

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

1 ответ

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

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

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

licensed under cc by-sa 3.0 with attribution.