Move XXXComponent::Build() and its hold asset data pointer and output rendering related data in a standalone class named XXXResource.
XXXComponent holds a XXXResource pointer. When pointer changes, a ResourceManager should check if current resource was already loaded in the memory. If loaded, just change the pointer to new Resource built data. If not loaded, then check if resource is built. If built, just load into memory. If not built, try to build it if asset data is in memory. If asset data is not in memory, try to load it from disk...
XXXComponent::Build()
and its hold asset data pointer and output rendering related data in a standalone class named XXXResource.