Volodymyr Melko
контроллер это часть UI слоя
это способ взаимодействовать с твоей бизнес логикой через веб
потом может оказаться, что взаимодействовать с твоим приложением нужно через асинхронную очередь, значит ты напишешь новый "контроллер", который вызывается на получение нового сообщение из очереди и скармливает идентификатор в нужный сервис с бизнес логикой... вот почему не надо в контроллере что-то доставать из бд, передавать куда-то и сохранять куда-то результат работы. иначе потом придется все тоже самое дублировать в других точках взаимодействия с приложением (консоль, сокеты и что либо еще)
контроллер это точка входа, если уж на то пошло.
они могут быть разные - ок, пока нет противоречий.
теперь, взяв тот же пример с business->doSomething(entity)
- надо ли зашивать проверку прав внутри бизнеса - нет конечно.
один и тот же функционал в разных точках входа может требовать разный набор действий.
делаешь из веб - проверяешь права, потом дальше БЛ отрабатывает.
делаешь из консоли - проверка прав была на уровне доступа к консоли, в принципе вне твоего приложения, - а значит там уже просто БЛ отрабатывает без проверки прав.
делаешь асинхронно - ок, между поступлением в очередь и выполнением права могли измениться - очевидно чекнуть их надо.
зашив проверку в Business надо будет еще и if предусмотреть. но его ведь можно было избежать, просто композируя действия в точке входа.
другими словами - если переносишь эту композицию действий из точки входа в другое место ради переиспользования кода (ну а чо, у нас же везде логика та же самая) - придется ставить больше if, а это неправильно.