Estoy expandiendo/convirtiendo una aplicación de Web Forms heredada en una aplicación MVC totalmente nueva. La expansión es tanto en términos de tecnología como en caso de uso comercial. La aplicación heredada es un diseño basado en la base de datos bien hecho (DBDD). Entonces, por ejemplo, si tiene diferentes tipos de empleados como operador, supervisor, guardián de tienda, etc., y necesita agregar un nuevo tipo, solo tiene que ir y agregar algunas filas en un par de tablas y listo, su interfaz de usuario automáticamente tiene todo para agregar/actualizar el nuevo tipo de empleado. Sin embargo, la separación de capas no es tan buena.Diseño impulsado por dominio vs diseño basado en la base de datos para una aplicación web MVC
El nuevo proyecto tiene dos objetivos principales
- extensibilidad (por la actualidad y los requisitos de tuberías futuros)
- Rendimiento
que tienen la intención de crear el nuevo proyecto reemplazando el Diseño Base de datos manejada (DBDD) con un Diseño Dirigido por Dominio (DDD) teniendo en cuenta el requisito de Extensibilidad. Sin embargo, pasar de un Diseño Dirigido por Bases de Datos a un Diseño Dirigido por Dominio parece tener un impacto inverso al requisito de Desempeño si lo comparo con el rendimiento de la aplicación DBDD heredada. En la aplicación heredada, cualquier llamada de datos desde la interfaz de usuario interactuaría directamente con la base de datos y cualquier información se devolvería en forma de un DataReader o (en algunos casos) un DataSet.
Ahora con un estricto DDD en su lugar, cualquier llamada de datos se enrutará a través de la capa Business y la capa de acceso a datos. Esto significa que cada llamada inicializaría un objeto comercial y un objeto de acceso a datos. Una sola página de UI podría necesitar diferentes tipos de datos y, al tratarse de una aplicación web, cada página podría ser solicitada por múltiples usuarios. Además de ser una aplicación web MVC sin estado, cada solicitud necesitaría inicializar los objetos de negocio y los objetos de acceso a datos en todo momento. Parece que para una aplicación sin estado MVC el DBDD es preferible a DDD para el rendimiento.
¿O hay una manera en DDD para lograr ambos, la extensibilidad que proporciona DDD y el rendimiento que proporciona DBDD?
Destacó como una pregunta interesante porque toma la mecánica detrás de los diversos diseños tan literalmente. Muy a menudo, estas discusiones son demasiado abstractas para ser útiles. Este es muy directo. Estoy ansioso por ver cuáles son las respuestas (no tengo ni idea). –
Tengo un par de preguntas antes de comenzar a pensar: 1. ¿Qué es exactamente el requisito de rendimiento? Cuán rápido debe responder la aplicación. ¿Deberían responder todas las consultas en 1 segundo O 0.5 segundos para obtener datos y 1 segundo para las actualizaciones? 2. ¿Ya tiene algunas métricas para la aplicación actual y cuánto más lento funcionaría una basada en MVC? –
Tengo métricas para las operaciones actuales de la base de datos de aplicaciones. Excepto por los informes que pueden tener operaciones complicadas y con gran cantidad de datos, y pueden demorar minutos, el CRUD demora menos de un segundo, mientras que las operaciones de captación de datos máximo ocurren dentro de 2 a 3 segundos a nivel de la base de datos. Cuanto más lenta será la aplicación MVC, la pregunta es todo acerca de – devanalyst