Pass script to another script or use a DTO?

Hi, I have a power-up script with some behavior and some variables (speed, duration). When the power-up is picked up I pass the power-up script to the player script. Once power-up duration finishes i destroy the power-up script from the player script. Is this a common/good practice on unity, or should I pass a DTO(data transfer object) to the player script to handle the duration and let power-up script destroy itself?

I’ve been wondering that. I usually link World objects with UI by using a ScriptableObject.

For example, I have my player stats, such as Stamina. To show that in my UI, I have a ScriptableObject that holds this data so that I can reference this ScriptableObject in my UI and my Player object so that I can keep it in sync without references between them.

I can argue that my ScriptableObject is a DTO.

But I would love some second or third opinions on this approach.