Прошу оценить реализацию шаблона "Состояние"

Передо мной стоит учебная задача применить шаблон State для отчётов в моём групповом проекте.
Для отчёта определено три состояния: создан, утверждён и отправлен. Отчёт может изменяться в состояниях по следующей схеме: создан <-> утверждён -> отправлен.
Проблема заключается в комментариях моего преподавателя к этому решению. Он утверждает, что количество методов в каждом классе избыточно и что можно обойтись одним методом в каждом. Я считаю, что текущее решение является классическим вариантом, и я не понимаю в чём заключается проблема, поэтому решил вынести этот вопрос сюда. Пожалуйста, дайте ваши комментарии по поводу этого решения и возможные пути его улучшения.

Интерфейс состояния и классы состояний


     public interface IReportState
     {
         DateTime Date { get; set; }
    
         User Changer { get; set; }
    
         string Name { get; }   
    
         void Approve(Report report, DateTime date, User user);
    
         void Send(Report report, DateTime date, User user);
    
         void Cancel(Report report, DateTime date, User user);
     }

    public class CreatedState : IReportState
    {
        ...
    
        public void Approve(Report report, DateTime date, User user) =>
            report.State = new ApprovedState(date, user);
    
        public void Cancel(Report report, DateTime date, User user) =>
            throw new IncorrectChangeReportStateException("You cannot cancel not approved report!");
    
        public void Send(Report report, DateTime date, User user) =>
            throw new IncorrectChangeReportStateException("You cannot send not approved report!");
    }

     public class ApprovedState : IReportState
     {
         ...  
    
         public void Approve(Report report, DateTime date, User user)
         {
             return;
         }
    
         public void Cancel(Report report, DateTime date, User user) =>
             report.State = new CreatedState(date, user);
    
         public void Send(Report report, DateTime date, User user) =>
             report.State = new SentState(date, user);
     }

    public class SentState : IReportState
    {
        ...
    
        public void Approve(Report report, DateTime date, User user) =>
            throw new IncorrectChangeReportStateException("This report has been sent already!");
    
        public void Cancel(Report report, DateTime date, User user) =>
            throw new IncorrectChangeReportStateException("This report has been sent already!");
    
        public void Send(Report report, DateTime date, User user)
        {
            return;
        }
    }

Класс отчёта

    public class Report
    {
        IReportState State { get; set; }

        ...        
    
        public void Approve(DateTime date, User user) =>
            State.Approve(this, date, user);
    
        public void Send(DateTime date, User user) =>
            State.Send(this, date, user);
    
        public void Cancel(DateTime date, User user) =>
            State.Cancel(this, date, user);
    }

Ответы (0 шт):