Pergunta

Tenho um aplicativo, criado em MVC, que produz uma visualização que fornece informações resumidas em vários modelos.Além disso, alguns cálculos são realizados nos diferentes conjuntos de dados.

Não há um modelo único claro (que mapeie pelo menos uma tabela) que pareça fazer sentido como ponto de partida para isso, então os vários resumos são extraídos dos modelos contribuintes no controlador, passados ​​para a visualização e os cálculos são realizados lá .

Mas isso parece, bem, sujo.Mas os controladores deveriam ser leves, não é?E a lógica de negócios não deveria estar nas visualizações, como a tenho como presente.

Então, onde essas informações devem ser reunidas?Um novo modelo que não mapeia para uma tabela?Uma função/módulo de biblioteca?Ou alguma outra coisa?

(Embora eu veja isso principalmente como uma questão de arquitetura/padrão, estou trabalhando em Rails, FWIW.)

Editar:Boas respostas em geral e muito consenso, o que é tranquilizador."Aceitei" a resposta que fiz para manter o link para Railscasts no topo.Estou atrasado em minha visualização do Railscast - algo que farei tentativas extenuantes de corrigir!

Foi útil?

Solução

Como Brian disse, você pode criar outro modelo que organize o trabalho que precisa ser feito.Há um ótimo Railscast sobre como fazer esse tipo de coisa.

HTH

Outras dicas

Os controladores não precisam mapear modelos ou visualizações específicas.Seu modelo não precisa mapear um a um para uma tabela de banco de dados.Essa é a ideia da estrutura.Separação de preocupações que podem ser testadas isoladamente.

Por que não criar um modelo que não herde ActiveRecord::Base e execute a lógica lá (pense na classe Cart no Agile...With Rails).

Os controladores não precisam ser que leve.

No entanto, se você tiver alguns cálculos que dependem apenas do(s) modelo(s), provavelmente precisará apenas de algum tipo de wrapper de modelo para que os modelos executem o cálculo.Você pode então colocar isso na API da visualização para que ela obtenha o resultado final.

Você não quer que a lógica esteja na visualização.No entanto, você está livre para criar uma visualização do banco de dados.Exceto que, em vez de criá-lo no banco de dados, crie-o como um novo modelo.Isso permitirá que você execute seus cálculos e sua lógica real em um só lugar.A dor de tentar manter suas opiniões sincronizadas vs.a única "dor" de criar o novo modelo...Eu voto em um novo modelo.

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