O método adiciona do ProdutoController faz as validações e chama direto o método de persistência da camada de banco.
Não deveria existir um 'intermediário' na camada de modelo que deveria fazer essas validações das regras de negócio para adição de um produto?
Nesse caso, o controller não está 'fazendo coisas que não deveria'?
Como poderia separar essas responsabilidades? Faz sentido criar uma classe de ProdutoRegrasNegocio?