Aumentar a duplicação de código para simplificar as regras de negócios nas visualizações

5

Estou no processo de escrever um aplicativo da Web Ruby on Rails para o departamento da minha universidade.

Para alguns dos nossos recursos no aplicativo da web, por exemplo, Project são complexos com a lógica da camada de visualização:

  • um Project pode ser criado por admin ou faculty usuários.
  • após o envio, faculty não pode atualizar alguns atributos de seus Project .
  • student usuários podem visualizar o projeto do qual participam, mas não podem atualizar nenhum atributo (somente visualização).
  • novo Project deve ocultar alguns campos que estão visíveis na ação show , porque esses campos são atualizados por admin após o envio do formulário
  • muitas mais regras ...

Atualmente, tenho um único formulário para cada tipo de ação: novo , show e edição . O problema é que as regras de negócios são apresentadas nas visualizações de uma maneira muito complexa. Eu fiz isso originalmente para evitar ter um formulário separado para cada usuário (que o controller renderia com base no role do usuário), que tinha muita duplicação de código. A lógica de negócios só se tornará mais complicada ao longo do tempo, tornando a abordagem de forma única mais complexa para desenvolver e manter. Mas, ao mesmo tempo, separar os formulários em exibições específicas de role causa um aumento na duplicação de código.

Então, para a pergunta. A criação de formulários separados para cada usuário role faz sentido, já que seria essencialmente uma duplicação de código de 50%? Existe uma solução melhor que isso?

Os atributos reais que são permitidos para serem atualizados são realmente controlados via Rails parâmetros strongs e a gem Pundit que permite o escopo de recursos baseados em regras (como User.role ). O que eu estou falando é somente a camada de apresentação .

Como um aparte, eu já tentei trabalhar com partials para campos de formulários compartilhados; no entanto, eu eventualmente preciso mover x ou y do campo para fora do parcial e voltar para o formulário único complicado porque algumas regras de negócios são alteradas para restringir o acesso a determinados campos para determinadas funções.

Eu também consultei esta pergunta MVC , que é bem parecido, mas é o ASP.NET que pode ter uma diferença em como essas regras podem ser separadas da exibição; Eu nunca trabalhei com o ASP.NET, então não sei. Esta pergunta geral do MVC também não responda a minha pergunta; minhas regras de negócios já estão presentes em meus modelos e através da gema Pundit; no entanto, como melhor apresentar esses dados não são discutidos.

    
por Chris Cirefice 21.02.2016 / 20:45
fonte

1 resposta

1

Em geral, você deseja que suas regras de negócios sejam tratadas em seus controladores ou (melhor ainda) em seus modelos. O código de visualização deve realmente lidar apenas com a exibição de informações.

Pessoalmente, eu uso o cancan gem para lidar com a autenticação do usuário. Pode ser um bom ponto de partida para você. (Embora pareça que você precisará fazer alguma refatoração.) link

Além disso, não entendo completamente seu caso de uso em relação a parciais, mas raramente há motivo para duplicar o código. Perceba que você pode passar parâmetros para parciais: link

Com isso em mente, você não precisará duplicar nenhum código. Isso é um grande cheiro de código. Se você está fazendo isso, normalmente significa que você deve repensar parte do seu design.

Espero que ajude

    
por 17.03.2016 / 17:18
fonte