I wrote a little package called “Datasacks” that are basically Unity ScriptableObjects and can be plugged into various UnityEngine.UI components to ease the process of integrating with your game code.
The basic idea is that you no longer need to drag references from your scenes/prefabs into your code. Instead you drag references to these Datasacks, and then the UI components or your code interoperates directly with those Datasacks.
For efficiency these components set up a small network of bidirectional listener/observer patterns in order to make it all very slim on Unity runtime resources.
All the source is available here at:
There’s a little mini example game inside of it showing off a lot of the components, as outlined in the above diagram.