Концепция "толстой модели" не означает, что весь код должен быть перемещен в модель, как я уверен, вы уже знаете. В этом случае команда Cake может привести аргумент - я думаю, правильно - что отправка электронной почты является функцией логики application , а не логики business . Если вы примете это предположение, то все функции, связанные с почтой или обменом сообщениями, будут находиться в контроллере, где доступны компоненты.
Я всегда стараюсь думать об этом так:
Если бы я создавал API в своем приложении, я бы хотел повторно использовать всю логику business , но практически не использовать логику application . Если кто-то выполняет действия против моего приложения через API, мое приложение, как правило, не несет ответственности за отправку электронного письма непосредственно клиенту. Он / она не знает, что он / она использует мое приложение, поскольку к нему обращаются из внешнего источника. Лучшее решение состоит в том, чтобы выполнить бизнес-логику, а затем, в зависимости от ее возможности, заставить контроллер (логику приложения) отправить электронное письмо.
Это не устранит неоднозначность в каждом случае использования, но в большинстве моих помогает.