Pergunta

eu tenho um ASP.NET MVC Site e estou tentando descobrir a separação do controlador e do modelo (repositório) e funcionalidade auxiliar HTML.

O objetivo é consultar uma tabela de banco de dados de informações sobre álbuns de fotos e exibi -las agrupadas por ano.

As etapas são:

  1. Banco de dados de consulta e retorno datatable das informações do banco de dados.
  2. Converta Datatable em AlbumCollection (Lista)
  3. Álbuns de balde por ano no albumdictionary
  4. Renderize todos os anos em uma tabela HTML separada.

Dado esse pedido, eu pude ver: 1,2,3 tudo no modelo e o controlador simplesmente liga a vista ao modelo de albumes ou 1,2 no modelo e se liga ao albumcollection e 3 em um html viewhelper ou 1,2 no Modelo 3 no controlador e se liga ao Dictionary do Álbum

Pensamentos?

Fazer todas as conversão no primeiro loop teria o melhor desempenho, mas não tenho certeza se é a melhor separação de preocupações.

Em particular para a pergunta acima, o feedback genérico seria interessante: quando a separação de preocupações anula o desempenho ou o vice -versa?

Foi útil?

Solução

Eu tentaria manter o modelo livre de qualquer coisa que tenha a ver com a renderização.

Eu vejo o agrupamento por ano bem perto da renderização. É por isso que eu não o colocaria no modelo e também não no controlador. Uma abordagem comum deve ter um modelo de POCO e DAL/BLL e modelo mais chamado ViewModel (o modelo usado pela visão fortemente digitada). Este é um bom lugar para preparar os objetos para renderizar.

No ViewModel, eu usaria o LINQ para agrupar os álbuns por anos. Esperamos que isso seja rápido o suficiente.

Outras dicas

Tendo sido um usuário de um software verdadeiramente horrendo que eu certamente parecia bem de uma perspectiva orientada a objetos para os designers e foi possivelmente fácil de manter, quero ressaltar que os usuários descerão quase o desempenho quase toda vez.

Se a diferença de desempenho for insignificante, siga a separação de preocupações, se não for, faça o que for preciso para obter o melhor desempenho. Precisamos parar de nos preocupar tanto com os minutos extras para manter (talvez tocar esse código uma vez por ano, uma vez que estiver no Prod) e mais sobre lentidão para todos os usuários todos os dias. Gostamos de dizer que o tempo de desenvolvimento é tão caro que precisamos minimizá -lo, mas a verdade é que o tempo de desenvolvimento geralmente é muito mais barato do que a quantidade de tempo pedindo que nossos usuários desperdiçam diariamente.

Eu faria o bucketing no controlador apenas se seja:

  • O balde ocorre apenas uma vez e eu posso fazer isso com um ou dois simples declarações;

  • Ocorre mais de uma vez, mas posso fazer isso com apenas um AlbumDictionary.BucketByYear() declaração.

Caso contrário, eu usaria modelos para fazer isso.

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