SRP применил к примеру рабочего процесса: как структурировать классы разумно

StackOverflow https://stackoverflow.com/questions/1792651

Вопрос

У меня есть проблема с принятием учебных обязанностей.
У меня 3 HTML-форма:

  1. Для каждой формы есть шаблон HTML, содержащий немного текста и маркер для включения формы
  2. Каждая форма должна быть подтверждена, если есть ошибка, шаблон и форма из (1) необходимо вновь разыграть вместе с некоторыми сообщениями об ошибках. Только некоторые поля распространены в разных формах.
  3. Если нет ошибок, сообщение о результате нужно отправить по почте. Для каждой формы есть шаблон почты результата.

Мне очень трудно определить хорошую схему класса для этой проблемы. Одна возможность - разделение классов по функциональности

  • CheckFormData: проверка данных формы
  • Displayform: отображение формы с/без ошибок (или отделить это тоже?)
  • Emailform: Emailform.

Я не уверен в этом. Знание о областях одной конкретной формы рассеивается в различных классах.

Есть какой -то рабочий процесс. Может быть, я должен также провести класс рабочего процесса:

class FormSubmitWorkFlow
{
   function start() 
   {
     $this->displayForm->render();
   }

   function processFormData($data)
   {
      $this->checkForm->setData($data);
      if (!$this->checkForm->isValid())    {

         $errors = $this->checkForm->getErrors();
         $this->displayForm->setData($data)->setErrors($errors)->render();
      } else {
         $this->emailForm->setData($data)->email();
      }
   }

   function setDisplayForm(DisplayForm $df)
   {
      $this->displayForm = $df;
   }

   function setCheckForm(CheckForm $cf)
   {
      $this->checkForm = $cf;
   }

   function setEmailForm(CheckForm $ef)
   {
      $this->emailForm = $ef;
   }
}

Для каждого типа формы (помните, их 3) мне понадобится

  1. CheckForm,
  2. EmailForm а также
  3. DisplayForm учебный класс.

3*3 = 9 классов + 3 базовые классы = 12 классов.
Кроме того, вы хотите внедрить правильный контроль-форму-SUBClass и Emailform-Subclass в рабочий процесс, все они должны быть одинакового типа формы. Может быть, нам нужно создать для этого FormworkFlowFactory. Это добавляет 13 классы

Теперь у меня есть чувство, что делаю что -то ужасно неправильное. Если бы у меня было FormSubmitWorkFlow Как класс метода шаблона, я мог бы просто создать 3 подкласса, но каждый подкласс будет смешивать разные обязанности.

Как вы могли бы улучшить это, и не могли бы вы мотивировать свой ответ, то есть какой метод приводит вас к вашему ответу?


редактировать: Хотя единственный текущий ответ полезен, было бы неплохо увидеть некоторые голоса от людей, которые согласны с этим, или я хотел бы услышать лучшие решения от сообщества. Я единственный, кто провели этот ответ. Этот вопрос может использовать больше ввода, поэтому не стесняйтесь предоставлять так :-)

Это было полезно?

Решение

Я не уверен, ответит ли это на ваш вопрос или нет, но, очевидно, цель SRP - написать ваш код, чтобы, если вам нужно что -то изменить, это только по одной причине. Например, если бы у вашего автомобиля был SRP, то не было бы класса, который регулировал температуру, а также ставит окна вверх и вниз. Это нарушит принцип. В этом случае вы, кажется, делаете это правильно. Да, это много классов, но альтернатива - большая путаница. Если бы не было способа создать один класс, который проверил бы формы (что действительно должно быть возможно в зависимости от того, какую проверку вам нужна).

Если вы создали класс проверки, где вы можете просто добавить цепочку ожидаемых значений и посмотреть, соответствуют ли они, у вас, вероятно, будет больше общих классов, но я думаю, что это будет гораздо менее связано. Дайте мне знать, правильно ли я вас понял или нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top