Pergunta

Tenho um problema em decidir sobre as responsabilidades da classe.
Eu tenho 3 formas HTML:

  1. Para cada formulário, existe um modelo HTML contendo algum texto e um marcador para o formulário ser incluído
  2. Cada formulário precisa ser validado, se houver um erro que o modelo e o formulário de (1) precisem exibir redisplay, juntamente com algumas mensagens de erro. Apenas alguns campos são comuns nas diferentes formas.
  3. Se não houver erros, uma mensagem de resultado precisará ser enviada por correio. Para cada formulário, existe um modelo de correio de resultado.

Acho muito difícil decidir sobre um bom esquema de classe para esse problema. Uma possibilidade é separar as classes por funcionalidade

  • CheckFormData: verificando dados do formulário
  • DisplayForm: Exibir formulário com/sem erros (ou separar isso também?)
  • EmailForm: emailForm.

Não tenho certeza disso. O conhecimento sobre os campos de uma forma em particular é disperso, acumulando as várias classes.

Há algum fluxo de trabalho. Talvez eu também deva ter uma classe de fluxo de trabalho:

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

Para cada tipo de formulário (lembre -se, existem 3 deles), eu precisaria de um

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

3*3 = 9 classes + 3 classes base = 12 classes.
Além disso, você deseja injetar a subclasse de checkform-subclasse e a subclasse emailForm no fluxo de trabalho, todos precisam ser do mesmo tipo de formulário. Talvez precisemos criar um FormworkFlowFactory para isso. Isso soma para 13 Aulas.

Agora tive a sensação de que estou fazendo algo terrivelmente errado. Se eu tivesse FormSubmitWorkFlow Como uma classe de método de modelo, eu poderia apenas criar três subclasses, mas cada subclasse mistura responsabilidades diferentes.

Como você poderia melhorar isso e você poderia motivar sua resposta, ou seja, que método o leva à sua resposta?


editar: Embora a única resposta atual seja útil, seria bom ver alguns votos de pessoas que concordam com ela, ou eu gostaria de ouvir melhores soluções da comunidade. Eu sou o único que voou nesta resposta. Esta pergunta pode usar mais informações, então fique à vontade para fornecer isso :-)

Foi útil?

Solução

Não tenho certeza se isso responderá à sua pergunta ou não, mas obviamente, o objetivo do SRP é escrever seu código para que, se você precisar mudar alguma coisa, é apenas por um motivo. Como se o seu carro tivesse SRP, não haveria uma classe que ajustasse a temperatura e também colocasse as janelas para cima e para baixo. Isso violaria o princípio. Nesse caso, você parece estar fazendo certo. Sim, são muitas aulas, mas a alternativa é muita confusão. A menos que houvesse uma maneira de criar uma única classe que validaria os formulários (que realmente deveriam ser possíveis, dependendo do tipo de verificação que você precisa).

Se você criou uma classe de verificação na qual poderia simplesmente adicionar uma cadeia de valores esperados e ver se eles correspondiam, provavelmente teria mais classes gerais, mas acho que seria muito menos acoplado. Deixe -me saber se eu entendi corretamente ou não.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top