Frage

Ich habe ein Problem mit der Entscheidung über Klassenverantwortung.
Ich habe 3 HTML-Formen:

  1. Für jedes Formular gibt es eine HTML -Vorlage, die einen Text und einen Marker enthält, damit das Formular enthalten ist
  2. Jedes Formular muss validiert werden, wenn ein Fehler in der Vorlage und das Formular aus (1) zusammen mit einigen Fehlermeldungen wiederbelebt werden muss. Nur einige Felder sind in den verschiedenen Formen häufig.
  3. Wenn keine Fehler vorliegen, muss eine Ergebnismeldung gesendet werden. Für jedes Formular gibt es eine Ergebnis -Mail -Vorlage.

Es fällt mir sehr schwer, für ein gutes Klassenschema für dieses Problem zu entscheiden. Eine Möglichkeit besteht darin, Klassen durch Funktionalität zu trennen

  • CheckFormData: Formulardaten überprüfen
  • Anzeigeform: Formular mit/ohne Fehler anzeigen (oder auch dies auch trennen?)
  • E -MailForm: E -MailForm.

Ich bin mir darüber nicht sicher. Kenntnisse über die Felder einer bestimmten Form sind verteilt, die verschiedenen Klassen abzuheben.

Es gibt einen Workflow. Vielleicht sollte ich auch eine Workflow -Klasse haben:

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;
   }
}

Für jeden Formulartyp (denken Sie daran, es gibt 3 davon), würde ich eine brauchen

  1. CheckForm,
  2. EmailForm und
  3. DisplayForm Klasse.

3*3 = 9 Klassen + 3 Basisklassen = 12 Klassen.
Außerdem möchten Sie die richtige Checkform-Sub-Klasse und die E-Mail-Form-Sub-Klasse in den Workflow einbringen. Alle müssen den gleichen Formulartyp haben. Vielleicht müssen wir dafür eine FormworkFlowfactory erstellen. Dies summiert sich zu 13 Klassen.

Jetzt hatte ich das Gefühl, etwas schrecklich falsches zu machen. Hätte ich FormSubmitWorkFlow Als Vorlagenmethodenklasse konnte ich nur 3 Unterklassen erstellen, aber jede Unterklasse würde unterschiedliche Verantwortlichkeiten mischen.

Wie könnten Sie das verbessern und Ihre Antwort motivieren, dh welche Methode führt Sie zu Ihrer Antwort?


bearbeiten: Obwohl die einzige aktuelle Antwort nützlich ist, wäre es schön, einige Stimmen von Menschen zu sehen, die damit einverstanden sind, oder ich würde gerne bessere Lösungen aus der Community hören. Ich bin der einzige, der diese Antwort verbessert hat. Diese Frage könnte mehr Eingaben verwenden. Sie können also gerne so bereitstellen :-)

War es hilfreich?

Lösung

Ich bin mir nicht sicher, ob dies Ihre Frage beantwortet oder nicht, aber offensichtlich ist das Ziel von SRP, Ihren Code zu schreiben, damit Sie, wenn Sie etwas ändern müssen, nur aus einem Grund ist. Als ob Ihr Auto SRP hätte, würde es keine Klasse geben, die die Temperatur einstellte und auch die Fenster auf und ab legte. Das würde das Prinzip verletzen. In diesem Fall scheinen Sie es richtig zu machen. Ja, es sind viele Klassen, aber die Alternative ist viel Verwirrung. Es sei denn, Sie konnten eine einzelne Klasse erstellen, die die Formulare validieren (was wirklich möglich sein sollte, je nachdem, welche Art von Überprüfung Sie benötigen).

Wenn Sie eine Verifizierungsklasse erstellen, in der Sie nur eine Kette erwarteter Werte hinzufügen und sehen können, ob sie übereinstimmen, hätten Sie wahrscheinlich mehr Gesamtklassen, aber ich denke, dass es weit weniger gekoppelt wäre. Lassen Sie mich wissen, ob ich Sie richtig verstanden habe oder nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top