Question

J'ai un problème avec la décision sur les responsabilités de la classe.
J'ai 3 formes html:

  1. Pour chaque forme il y a un modèle html contenant un texte et un marqueur pour la forme à inclure
  2. Chaque formulaire doit être validé, en cas d'erreur, le modèle et la forme de (1) doit réaffichée, ainsi que des messages d'erreur. Seuls quelques champs sont communs à travers les différentes formes.
  3. S'il n'y a aucune erreur un message de résultat doit être envoyé par la poste. Pour chaque forme il y a un modèle de courrier de résultats.

Je trouve qu'il est très difficile de se prononcer sur un système de bonne classe pour ce problème. Il est possible de séparer les classes par la fonctionnalité

  • CheckFormData: vérification des données de formulaire
  • DisplayForm: forme d'affichage avec / sans erreurs (? Ou séparer aussi)
  • emailform. Emailform

Je ne suis pas sûr à ce sujet. La connaissance des champs d'une forme particulière sont dispersés accross les différentes classes.

Il y a un flux de travail. Peut-être que je devrais aussi avoir une classe de workflow:

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

Pour chaque type de formulaire (rappelez-vous, il y en a 3) Je besoin d'un

  1. CheckForm,
  2. EmailForm et
  3. classe DisplayForm.

3 * 3 = 9 classes + 3 classes de base = 12 classes. En outre, vous voulez injecter le droit checkForm-sous-classe et emailform-sous-classe dans le flux de travail, ils doivent tous être du même type de formulaire. Peut-être que nous avons besoin de créer un FormWorkFlowFactory pour cela. Cela ajoute à 13 classes.

Maintenant, je suis le sentiment que je suis en train de faire quelque chose de terriblement mal. Si j'avais FormSubmitWorkFlow en tant que classe méthode modèle, je pouvais créer 3 sous-classes, mais chaque sous-classe mixerais différentes responsabilités.

Comment pourriez-vous améliorer cela, et pourriez-vous motiver votre réponse, à savoir quelle méthode vous conduit à votre réponse?


modifier : bien que la seule réponse actuelle est utile, il serait agréable de voir des votes des gens qui sont d'accord avec elle, ou je voudrais entendre de meilleures solutions de la communauté. Je suis le seul qui upvoted cette réponse. Cette question pourrait utiliser plus d'entrée, alors ne hésitez pas à fournir si: -)

Était-ce utile?

La solution

Je ne sais pas si cela répond à votre question ou non, mais de toute évidence l'objectif du SRP est d'écrire votre code de sorte que si vous devez changer quelque chose, il est pour une seule raison. Comme si votre voiture avait alors SRP il n'y aurait pas une classe qui règle la température et a également mis les fenêtres de haut en bas. Cela violerait le principe. Dans ce cas, vous semblez le faire droit. Oui il est beaucoup de classes, mais l'alternative est beaucoup de confusion. À moins qu'il y avait un moyen que vous pouvez créer une seule classe qui validerait les formes (ce qui devrait vraiment être possible en fonction de ce type de vérification dont vous avez besoin).

Si vous avez créé une classe de vérification où vous pouvez simplement ajouter une chaîne de valeurs attendues et voir si elles appariés alors vous auriez probablement des classes plus globales mais je pense que ce serait beaucoup moins couplé. Permettez-moi de savoir si je vous ai bien compris ou non.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top