Если выходит винигрет то стоит разбивать на более мелкие подзадачки и их уже решать по отдельности.
По идее так все должно быть на своих местах если все нормально делать.
Главное не увлекаться ибо будет одна функция одну функцию вызывать и возвращать ее результат..