using Chessistics.Engine.Events; using Chessistics.Engine.Model; namespace Chessistics.Engine.Commands; public abstract class WorldCommand : IWorldCommand { public void Apply(BoardState state, List changeList) { AssertApplicationConditions(state); state.ApplyCommand(DoApply, changeList); } protected abstract void DoApply(BoardState state, List changeList); public abstract void AssertApplicationConditions(BoardState state); }