Как уже выше написали, всю бизнес логику лучше разместить на уровне модели, а контроллер оставить "тонким".
Чтобы не нарушать принцип единственной ответственности, можно использовать паттерн Наблюдатель. Модель после добавления товара будет создавать событие, на которое смогут подписаться другие компоненты приложения. В результате код, ответственный за разные действия, будет находится в разных сервисах системы, и при этом слабо связан между собой