Standalone Plugin Structure, APVTS, Parameter Attachments

I have a total of 1.5 years of C/C++ and 1 year of JUCE experience, and am working on a standalone MIDI controller app. I originally built the project with the Projucer GUI App template but have since migrated it to the Standalone Plugin template in order to have a coupled AudioProcessor and AudioProcessorEditor and take advantage of saving parameters and undo/redo functionality. I’m now wondering about good practices for overall plugin architecture. Specifically, to organize my sliders and buttons, I added them as members of a ControlPanel class (not struct) that inherits from Component, which I defined in a separate header file and added to the PluginEditor as a private member. Now I’m wondering about the best ways to create attachments to the Parameters in my AudioProcessor. One tutorial I watched simply declared such a ControlPanel as a struct in the PluginEditor and gave it a reference to the APVTS in the ControlPanel’s constructor. Is using a reference like this an ok way to do this? Are there any disadvantages to doing this in a separate header file as opposed to doing it in the PluginEditor? Any general advice on how to organize plugins to best synchronize parameters and GUI would be appreciated!

Im very happy with having a StateManager class that contains the state of the plugin with all APVTS stuff and more. Its a member of the main audio processor and the gui gets references to this object instead of just the audio processor ptr, since it will be created before and destroyed after the gui.
I use combobox/slider/button attachments connected to the APVTS to control the plugin model and juce::ParameterAttachment for custom components that read/write parameters.