I am not sure what you mean Data Assets cannot be manipulated Dynamically. The Data Assets themselves are static, yes, but I did a test, and if I create a Data Asset at runtime, I am able to set and manipulate variables.
Using Data Assets allows others to create Data Assets that can be read from disk, but also can be used as an object in memory.
The variables can be changed (while the Actual Data Asset on disk can stay static as a permanent default), and then when that Data Asset needs to be saved, I have separate SaveGame Object Classes setup for each (blueprint only, so only way I know how to save them).
To control loading of assets and preventing hard references etc., I was thinking I would have, for example, character class that will hold re reference to all the various data objects (profile, images, history, inventory etc.), this way, say when a profile data section is needed to display in a widget, I can load it at that time, as it may never be needed otherwise, but yet, I can create “hard” Data Assets for complete Characters at development time or DLC packages, and as well, users can dynamically create them at runtime, then save to a save slot, and I can use a naming convention for save slots to append various data objects to a save slot string id - example: EOSUserID_CharacterID_Profile, and then I can avoid loading all of the data at the same time, and only load the characters profile from disk, without needing to load all textures, meshes, images etc. associated with the character.
I am also trying to use Data oriented programming over OOP. So want to completely seperate Data from Functions, except in Data Asset Classes where it makes sense. But I guess now I might as well put everything i nsubsystems and keep data with no functions
The real question, is how can I copy those functions from my blueprint library to the new Subsystem Object Class?