2015-04-10 5 views
0

в надежде на некоторые советы по моей архитектуресообщение Bus против слоистого

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

У меня есть контроллер действие под названием «CreateTeam» в TeamControler

Каковы огни метода TeamService CreateTeam, а затем также срабатывает метод PlayerService «CreatePlayers».

Что означает мой метод TeamController «CreateTeam» имеет два responsilibites

Но когда пользователь создает команду, мне нужны игроки, которые будут созданы также.

Так было бы лучше, если CreateTeam также запускает событие TeamCreated, которое было выбрано в другом месте? Предоставление единой ответственности и разделение проблем?

Кроме того, я никогда не использовал шаблон шины сообщений, прежде чем надеяться, что это не смущает кого-либо, но верно ли, что события поднимаются, когда автобус поднимается и что-то прослушивает? Значит, это будет Tell, не спрашивайте?

И, наконец, слушатели на шине сообщений могут ли они быть сетевыми контроллерами api? Вместо этого много разных приложений? Таким образом, мой метод PlayerController с CreatePlayers может быть запущен при создании CreateTeamEvent?

+0

Я не эксперт по архитектуре, но могу иметь отношение к структуре моего основного приложения. В принципе, я бы представил сценарий, в котором вы больше не взаимодействуете с основной бизнес-логикой с помощью контроллера. Тогда интеллект для создания игроков остался бы исключительно в вашем классе обслуживания. Если вы этого не сделаете, другой абонент класса Service не будет знать, что делать. Если новая Команда должна всегда создавать новых Игроков, то пусть Служба сделает это. Тогда это означает, что ваши слушатели сообщений звонят в Службу, вместо того, чтобы пытаться получить контроллер для получения сообщений. –

ответ

0

Где-то в вашей системе вы должны иметь знания (ответственность), встроенные для вызова ваших двух отдельных функций. Службу Servicebus можно было использовать для этого, но по моему опыту это было бы слишком сложным и сложным для понимания решением.

Я хотел бы придерживаться слоя (класса обслуживания), как предложено @S. Багги.