Sitio Web MVC que llama a WCF es mejor o MVC que llama a la operación de base de datos directamente es mejor

Tenemos que desarrollar un sitio web que se puede navegar desde el navegador de escritorio. También necesitamos desarrollar una aplicación android para el mismo sitio web. Estamos pensando en usar ASP.NET MVC con C #, Microsoft SQL Server y Windows Communication Foundation, Linq a Entity con Repository Framework.

WCF accederá a la base de datos utilizando Linq to Entity utilizando Repository Framework y devolverá JSON.

Pregunta 1 La aplicación de Android llamará al servicio de WCF. ¿Estamos pensando correcto?

Pregunta 2 El sitio web de ASP.NET MVC llamará al servicio de WCF. Hacer ASP.NET MVC llamada de la aplicación servicio WCF es mejor o la aplicación ASP.NET comunicarse directamente con la base de datos sin tener WCF en el medio es mejor?

Mi idea es utilizar WCF sólo para la aplicación Android y hacer ASP.NET MVC interactuar directamente con la base de datos utilizando linq a la estructura de la entidad utilizando el patrón de repositorio sin WCF en el medio. ¿Será este un buen enfoque?

Pregunta 3 Si el sitio web ASP.NET MVC llamará al servicio WCF, ¿dónde necesito implementar DI? Creo que debe ser entre el marco de repositorio y el servicio WCF y DI no tendrá nada que ver entre ASP.NET MVC y WCF. ¿Derecha?

Esto puede ser una pregunta simple, pero quiero saber cómo otros están haciendo si tienen el mismo tipo de requisito. Al igual que el sitio web y la aplicación Android. No estoy familiarizado con DI y cómo usarlo. He estado leyendo acerca de DI y no estoy muy bien. Así que quería saber dónde DI existirá?

  1. Tu aplicación de Android no puede llamar a tu base de datos directamente, por lo que necesitas un servicio intermedio. Esto puede ser WCF u otra opción popular es ASP.NET Web API.
  2. No debe permitir que su aplicación MVC se comunique indirectamente con la base de datos a través de un servicio WCF, a menos que esto sea realmente necesario (debido a problemas de seguridad o de organización, por ejemplo), porque esta capa adicional de indirección cuesta rendimiento. Hay un montón de gastos generales en la comunicación con WCF que simplemente no parece necesariamente.
  3. Si decide dejar que su aplicación MVC llame a un servicio WCF, tanto la aplicación MVC como la aplicación WCF obtienen su propia raíz de composición . Esto significa que cada uno tiene su propia configuración DI y su propia forma de inyectar dependencias. Pueden compartir mucho, pero esto no tiene que ser.

Espero que encuentres mi respuesta perturbadora. Probablemente le preocupa la sobrecarga de desarrollo de tener un servicio WCF y una aplicación MVC que se comuniquen a la base de datos, en lugar de tener un servicio WCF que sólo habla con la base de datos.

Sin embargo, esto no tiene que ser el caso. De hecho, esto no debería ser el caso. Cuando estás haciendo eso, estás haciendo cosas malas. Un servicio de WCF sí mismo debe ser nada más que una capa muy fina en la parte superior de su capa de negocio. La misma capa de negocio que usa la aplicación MVC. De hecho, al aplicar las abstracciones correctas, podrías intercambiar tu aplicación MVC de usar la base de datos para usar el servicio WCF en cuestión de minutos.

Puede hacerlo colocando las operaciones de su empresa detrás de una abstracción genérica y utilizar una arquitectura basada en mensajes. En este caso, su servicio WCF (o API Web) simplemente puede exceptuar esos mensajes y enviarlos a la capa de negocio. Si hace esto correctamente, descubrirá que puede escribir el servicio de WCF o el servicio de API Web de tal manera que se vuelven libres de mantenimiento, lo que significa: no tendrá que cambiarlos cuando el sistema crezca; cuando se agregan nuevas operaciones comerciales al sistema.

Le aconsejo que lea los siguientes artículos:

  • Mientras tanto … en el lado de mando de mi arquitectura
  • Mientras tanto … en el lado de la consulta de mi arquitectura
  • Escribir servicios de WCF altamente mantenibles .

Si después de leer esos artículos, está en duda acerca de cómo implementar esto, eche un vistazo al proyecto de Servicios Web altamente Mantenibles . Se trata de una aplicación de arquitectura de referencia que muestra cómo aplicar estos conceptos utilizando WCF y la API Web.

  • Lazy Injection con Dagger 2 en Android
  • Dagger no puede crear el gráfico del objeto aunque puede producir el archivo del punto
  • ¿Cómo inyectarse en clases estáticas usando Dagger?
  • Guice Performance en Android
  • Los objetos inyectados se convirtieron en nulos después de actualizar a Roboguice 3
  • Dagger and Butter Knife vs Android Annotations
  • No se puede crear una instancia de ViewModel personalizado
  • Alcance y subcomponentes de Dagger 2
  • Ventajas de inyectar el autobús de eventos de Otto en lugar de usar singleton estático
  • Conseguir Dagger para inyectar objetos simulados al hacer pruebas funcionales espresso para Android
  • ¿Cómo obfuscate el proyecto con Dagger 2.0 usando Proguard?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.