Onde o processamento de formulários pertence a um aplicativo MVC?

5

Eu encontrei esta pergunta no estouro de pilha e tenho uma pergunta sobre uma das respostas:

No Zend Framework, os formulários são tipicamente objetos com decoradores, mas geralmente (eu pensei) o processamento é feito usando uma combinação de controladores e modelos, com o objetivo principal de manter o controlador o mais leve possível, e cada objeto responsável por seu próprio estado.

Uma das respostas dizia para usar o próprio objeto de formulário como o local para encapsular os membros de processamento de formulário. Isso é uma boa prática?

Por alguma razão, isso parece estranho para mim. Mas também parece estranho fazer a maior parte do trabalho na camada de abstração do banco de dados (Zend_Db_Table / Row) ou no controlador. Onde é o melhor lugar para encapsular o processamento de formulários? Você deve criar classes separadas para o formulário em si e outra para processar o formulário (que lida com o DBAL)?

Editar: aqui é outro post do SO que faz uma pergunta semelhante, mas o OP não recebe uma resposta completa.

Queremos saber: onde cada parte da lógica de processamento de formulários pertence?

    
por Community 25.10.2011 / 23:11
fonte

4 respostas

2
  1. Lógica de validação pertence ao banco de dados, ao modelo de domínio e possivelmente o modelo de visualização.

    Acho que a maioria dos frameworks tem decoradores / atributos de modelo para definir a validação e visualizar os auxiliares para renderizar a visualização do modelo, incluindo a clareza da validação do lado do cliente. Portanto, tente deixar o framework fazer todo o trabalho para você e se concentrar no Modelo.

  2. A lógica de negócios pertence ao modelo (lógica dependente de domínio) e o Controlador (lógica dependente de serviço).

    Eu tenho a tendência de pesar o máximo de lógica possível no domínio Model para manter o Controlador de luz, como você diz. Mas eu geralmente prefiro não injetar serviço dependências na minha camada de domínio, por isso algumas dessas lógica tem que acontecer no Controlador.

por 26.10.2011 / 20:51
fonte
2

Depende do tipo de validação - quando a lógica de validação faz parte do domínio comercial, por exemplo, formato de um número de segurança social, a validação deve estar localizada no modelo. Se a lógica de validação só se aplica a um formulário específico, coloque a validação no formulário.

Você faz isso porque deseja reutilizar a lógica de validação em vários formulários possíveis.

    
por 26.10.2011 / 07:57
fonte
2

O sempre pertinente 'onde diabos faz a lógica de validação?' pergunta;).

A resposta é: Depende.

Eu gosto de aplicar o seguinte conjunto de regras:

Primeiro: validações de nível de banco de dados que me impedem de colocar dados ruins

Segundo: veja as validações de nível que são um pouco mais brilhantes para fornecer respostas específicas ao formulário específico

Terceiro: validações de nível de javascript que fazem validação dinâmica para salvá-las do incômodo de clicar

submit->ohfrickmissedthat->fix->submit->ohfrickmissedthattoo

Obviamente, até onde você segue este conjunto de regras, depende de quão útil sua aplicação deve ser.

    
por 26.10.2011 / 09:40
fonte
0

Se você criar um objeto que é mapeado a partir do seu formulário e que mapeia para uma tabela de banco de dados, o zend torna sua vida muito mais fácil nesse ponto.

Você deve processar seus formulários nos controllers ou se isso fizer sentido em uma classe delegada de negócios. mas seja variado que você não faz também pode camadas. do que você terá que passar em torno de objetos etc. será uma bagunça e difícil de manter. Eu costumo começar no controlador, se não houver muita lógica de negócios para executar.

    
por 25.10.2011 / 23:42
fonte