How would you structure a front-end application to ensure clean separation of concerns and optimal state management?