Setup For Move System in Turn-Based RPG

I am making a turn-based RPG. A Unit is represented by a GameObject that has a Unit script, which indicates stats, moves, etc.
Moves are respresented as scripts., like KunaiSlash, etc
Now I was wondering what the best approach would be to handling giving characters their moves.
I have several ideas. One is that Move scripts are MonoBehaviors and you add them as components to a Unit’s gameObject. Unit class fetches all Move components into a list.
Another idea is that the Moves list on Unit is public and you assign each slot a Move script, and Move scripts are not MonoBehaviors.
The first idea makes it easy to configure moves but can clutter the Inspector.
The second idea is more organized but I have to go directly into the scripts themselves in order to make any changes, and it is more cumbersome to configure.

How would you go about handling a move system in a turn-based RPG?

I would definitely design it with MVC in mind (Model-View-Controller). Your model is your data, your view is how the data is displayed and the controller interacts with the two.

So when you design a move, I’d just create data classes that contain the moves name, its effect , that sort of thing. It should have no idea about animations or actually hitting enemies, or buffing up yourself. It just has the data that something else might use to achieve all this.

Now your view component would be a class that handled the animations for these moves. You’d have an animation variable you set, and methods to call to start/stop playing those animations.

Then create a Controller class that has both the model and view classes as its variables. It would be in charge of getting the data from the model, and knowing when to tell the view class to start/stop animations. For example it could have a timer variable to know how long you still have to wait to do this move again. The model class would have the data for the timer. Say it was 2seconds. But the Controller class would have a variable that was keeping track of the time since the last use of the move.

This way you can easily change your model(data) without really affecting your view, and vice versa. If you decided to go from 2D to 3D your KunaiSlash model data wouldn’t change at all, just your view class would change.

You would then create a MonoBehaviour MovesScript that is attached to your Player. It would have an array (or List) of Controller class. This MovesScript would be in charge of telling the game what moves are available and the game would call methods on the MovesScript to actually perform a particular move.