What is the problem with logic inside scriptable object

I am following Jason Weimann’s tutorial on youtube

If you scroll all the way down to xanaramus’s comment
he mentioned that it would get hard to maintain them once you have to use
a lot of the SO.

Could anyone tell me why that is? and what is a good alternative

to creating abilities with SO?

I am currently trying a Dictionary approach and am not sure if it’s better.

In the comment he is just saying it’s hard to mantain if you have tons of scriptable objects. In addition to this, he says that it’s not good to mix logic with data.

Personally I don’t think that’s an issue and also Jason doesn’t think it’s a big deal. It doesn’t matter how you do it if you don’t have any issue using that method.

What you could do is create an abstract class like my GunController (I deleted a lot of lines):

using UnityEngine;

public abstract class GunController : MonoBehaviour
{
    //Here you have a scriptable object that is our data so we separate logic from data
    public WeaponScriptableObject weaponData;

    //With virtual you are declaring and coding the behaviour of a method
    protected virtual float GetGunDamage(float targetDistance)
    {
        return weaponData.bulletDamage * weaponData.gunRange.Evaluate(targetDistance);
    }
    public virtual void ShootFullAuto() { }
    //With abstract you are just declaring the methods. Then childs need to override it
    public abstract void Shoot();
    public virtual void Reload()
    {
        if (!isReloading)
        {
            isReloading = true;
            reloadEndTime = Time.time + weaponData.reloadDuration;
            Invoke(nameof(StartReloadInvoke), weaponData.reloadDuration);
        }
    }
}

And code a child is like this one:

using UnityEngine;

public class SingleShotGunController : GunController
{
    public override void Shoot()
    {
        ShootSingleBullet();
    }
    public override void ShootFullAuto()
    {
        if (weaponData.firemode == Firemode.FullAutomatic)
            Shoot();
    }
}

It’s the exact same approch but you don’t mix data with logic.

Same isssue occue how can i solve this ?