¿Cuál es la mejor arquitectura para un sitio web de mediano tamaño y alto tráfico?

architecture asp.net-mvc dapper entity-framework performance

Pregunta

Estoy comenzando un nuevo proyecto (no corporativo) y quiero saber cómo sería una gran arquitectura hoy en día.

Lo que estoy planeando ahora es usar:

  • ASP.NET MVC 4.0
  • SQL Server 2008 o 2012
  • EF 5.0 en .NET 4.5, con Dapper
  • Implementación del patrón Repository (este http://code.google.com/p/ef4prs/ )
  • DI con Autofac
  • Automapper
  • Capa de servicio WCF (para la futura implementación móvil)

Verificando el flujo (corrígeme si algo está mal): Controller llama a ApplicationService , que llama a BusinessLayer , que llama a DAL con UnitWork / Repository, que ejecuta consultas sobre EF o Dapper (¿es correcto consultar Dapper desde un método específico en Repository? ), el resultado se asigna automáticamente a un DTO y se devuelve al controlador , que copia lo que se necesita para un ViewModel y devuelve una vista.

El problema aquí es el rendimiento, como dije, el sitio está planificado para tener un alto tráfico. En este caso, ¿alguno de los elementos enumerados anteriormente podría reducir el rendimiento? ¿O esta combinación filtra algo más? ¿Debería descartar el EF y usar solo Dapper? Me temo que la capa de servicio podría reducir el rendimiento debido al tráfico.

Y, por último, no sé si esta arquitectura es innecesaria, o simplemente pobre.

Esas son muchas preguntas, pero el objetivo es conocer una solución excelente y no "demasiado arquitectónica" para un sitio web de tamaño medio.

Perdón por el inglés

Respuesta aceptada

Su pregunta es bastante subjetiva ya que hay muchas configuraciones posibles que pueden funcionar bien. Aunque puedo darte algunas recomendaciones.

Mezclar y combinar EF con Dapper puede ser un poco un campo de minas. En teoría, debería poder buscar objetos con Dapper y luego Attach al DbContext y actualizarlos. Sin embargo, en mi experiencia, a menudo eso no funciona. Empezamos con EF, luego nos movimos lentamente a Dapper para consultas rápidas y pensé que podíamos seguir utilizando EF para actualizaciones / insertos, pero terminé rodando mi propio seguimiento de inserción / actualización (sorprendentemente fácil) y, por lo tanto, estamos eliminando gradualmente uso de EF.

En retrospectiva, sugeriría elegir uno y seguir con él. EF debería ser bastante rápido en .NET 4.5. Aunque no tan rápido como Dapper, entonces la ruta pura de Dapper no es mala para tomar.

Otras tecnologías que podrías considerar:



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow