Вурдалак
Продвинутый новичок
Представь, что у тебя онлайн-игра. В силу разных причин, ты можешь захотеть ввести в игру ботов (для тестов, по «легитимным» причинам, для имитации активности, ...). Первая идея — напрямую херачить запросы в базу, дергать инфраструктуру, ну, мы же бота пишем, это машина, все дела. Потом приходит понимание, что полезнее использовать те же команды, что используют реальные игроки: во-первых, это будет естественнее и «честнее» (твой бот будет иметь те же возможности, что юзер и не сможет напрямую отнимать жизни у других и т.д.), во-вторых, это проще в поддержке, так как сама игра на ботов не будет завязана и не будет делать различий между ботом и человеком. То есть, логика ботов будет в отдельном bounded context.есть рутинг
И вот теперь представь, что ты вместо слова «команда» используешь понятие «рут» (route), «рутинг». Боты «ходят» по «маршрутам»? Выполняют «маршруты»?
Это наивное предположение, что routing web по количеству «маршрутов» будет один-в-один совпадать с консольным и с набором бизнес-команд, хотя в общем случае это не так. В силу разных причин (BC, компромисс с client-side или просто потому что для внешнего клиента это будет другим действием) у тебя может появится web route, по которому будет внутри выполняться физически 2 бизнес-действия. Здесь web API служит своего рода ACL (anti-corruption layer) между реальными бизнес-командами и внешними.он естественно для консольных приложений и хттп действий разный, но и в том и в другом случае вызов одинаковый
Вот ещё пример с онлайн-игрой: клиент может захотеть нажать «logout», в то время как в контексте игры мы выполним действие «выйти из игры». В контексте web-сайта это действительно может быть «логаут», в контексте игры — «признать поражение / выйти / ливнуть». А ещё мы можем забанить юзера, но таким образом, чтобы он этого не подозревал (какой-нибудь спамер). Мы ему будет говорить: «окей, чувак, сообщение отправлено» и нагло ему врать в лицо и команда даже не начнёт выполнение.
DRY головного мозга — это когда «похожие» вещи называются «повторами» и «одними и теми же». Это лечится со временем, вот некоторые интересные посты:
http://us3.campaign-archive2.com/?u=1090565ccff48ac602d0a84b4&id=5132867f6e
http://verraes.net/2014/08/dry-is-about-knowledge/
(можешь просто погулять на тему «DRY is evil» и что-то в этом духе).
Безусловно, команды в web-контексте могут по большей части совпадать с бизнес-командами, но нельзя их выравнивать один-ко-одному, они не одинаковые. Web API — просто посредник между внешним миром и внутренней логикой, которая может очень сильно эволюционировать. А web API в силу BC это сделать может не всегда.
... или это связано с тем, что тебе тупо неудобно переносить команды из web в консоль, поэтому у тебя «практически никогда» такого не происходит. Я чисто из удобства различные действия а-ля «забанить юзера» дублирую в консольные команды, чтобы можно было это выполнить там, не заходя в админку (которая может требовать подтверждения через SMS для логина и т.д.). Или потому что я не занимаюсь вёрсткой и иногда web-админки тупо нет.чаще всего (практически всегда) консольные команды имеют совершенно другие задачи нежеле web там не надо копипастить.