Opcja pierwsza, command'y:
-
SubmitArticleCommand
->SubmitArticleCommandHandler
-
PreviewArticleCommand
->PreviewArticleCommandHandler
wszystko spięte CommandBus
'em.
Opcja druga, serwis/fasada:
-
SubmitArticleDto
->ArticleService
--- deleguje -->ArticleSubmitter
-
PreviewArticleDto
->ArticleService
--- deleguje -->ArticlePreviewer
.
W tym wypadku mamy fasadę ArticleService
, która spina odpowiednie serwisy.
Jaka jest zaleta użycia CommandBus'a (poza możliwością podpięcia logowania)?
Jak na razie to widzę same problemy.
Na przykład rzucanie wyjątków. Powiedzmy, że nasz SubmitArticleCommandHandler
rzuca jakieś wyjątek. W tym momencie nie wiemy czy i jaki wyjątek może zostać wyrzucony podczas wykonania tej komendy. Muszę ręcznie znaleźć odpowiedniego CommandHandler
'a (w przypadku serwisu mogę się po prostu przeklikać w IDE), a później sprawdzić jakie wyjątki są wyrzucane przez mojego commanda. Ide mnie nie informuje jakie wyjątki mogą zostać wyrzucone w miejscu wywołania commandBus.dispatch(command)
(w przypadku serwisu od razu widzę, co jest nieobsłużone).