Is it ok to use a prefab asset without instantiating it?

It's possible to have a direct reference from a component in the scene to a prefab in the Assets folder, without having instantiated the prefab. Is this a bad idea?

For example, suppose I have some user-defined component ComponentX. I can create a prefab that is an empty game object with just ComponentX (and a Transform), and then delete the prefab instance from the Hierarchy, leaving just a prefab asset in the Project, let's call it PrefabX.

Suppose I have another component, ComponentY, which contains "public ComponentX xcomp;". With a game object in the scene that has ComponentY, I can drag PrefabX from the Project view onto ComponentY.xcomp.

This has a couple of side effects that lead me to wonder if this is a good idea:

  1. changes made to properties of PrefabX while the game is running are permanently saved back to the asset
  2. the Start, Awake, and Update methods of ComponentX are not called for PrefabX

For my particular use case I'm ok with both these anomalies, but I wonder if I'm abusing the prefab system and asking for trouble. Advice appreciated.

I wouldn't say it is wrong, but you are opening up possibilities for possibly bad results. I only reference prefabs when I am going to Instantiate an instance of them.

[Warning: My insignificant opinion forthcoming]Editing a prefab feels strange to me in OOP. Its not really a singlton, but their is only one instance. And editing the properties affects all its copies too.

If you don't need a scene object for your reference, then why don't you just make a helper class that can store your data. Why bother instantiating an entire GameObject?

//ScriptOnYourScene.cs
public class MyScriptComponent : MonoBehaviour {
    //Serializing the class let's Unity display it in the inspector.
    public HelperClass object;
}

//HelperClass.cs
[System.Serializable]
public class HelperClass {
     public int curValue;
     public Vector3 curPos;
}